本篇有知识点AlertDialog对话框,有Handler消息机制
1,获取当前计算机时间毫秒:System.currentTimeMillis()
2,跳转请求是startActivityForResult(intent, 1);//第一个是intent对象,第二个是请求码
3,返回值是 setResult(2,intent); //第一个是返回码,第二个是intent对象
4,处理请求和返回的方法onActivityResult(int requestCode, int resultCode, Intent data)//第一个为请求码,第二个为返回码,第三个是返回的intent对像的数据
需要注意的地方:
1,Intent跳转如果携带数据,那么接收方法一定是intent().getIntent().getxxx
2,Intent跳转携带的数据支持所以基本数据类型和所以实现了Serializable接口的数据
3,显示跳转是本类this,跳转类.class
4,带返回值跳转完记得销毁页面 finish()
5,所有的耗时操作在消息机制里执行
6,切记接收参数的时候,如果官方没有给intent对象一定用getIntent之后在getStringExtra,如果给出intent对象直接intent.getStringExtra
偶然发现在返回的方法里onActivityResult里接收基本数据类型失败int ss = data.getIntArrayExtra("wan",0);。不想麻烦用Bulde的。
就声明一个数组 ----int[] ss = data.getIntArrayExtra("wan");这样就可以了
代码如下:
首页Activity
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:background="@drawable/fdfsa" tools:context=".MainActivity" > <EditText android:id="@+id/main_et" android:layout_width="fill_parent" android:layout_height="wrap_content" android:numeric="integer" android:singleLine="true" /> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:text="点击获取" android:onClick="send" android:layout_below="@+id/main_et" /> <TextView android:id="@+id/main_tv" android:layout_width="wrap_content" android:layout_height="wrap_content" android:textSize="50sp" android:textColor="#f00" android:layout_centerInParent="true" android:textStyle="bold" /> </RelativeLayout>
package com.example.intentdemo01; import java.io.Serializable; import android.app.Activity; import android.app.AlertDialog; import android.app.Dialog; import android.app.DialogFragment; import android.content.DialogInterface; import android.content.Intent; import android.os.Bundle; import android.text.TextUtils; import android.util.Log; import android.view.View; import android.widget.EditText; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity { private TextView tv; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv = (TextView) findViewById(R.id.main_tv); } public void send(View v){ EditText et = (EditText) findViewById(R.id.main_et); String str = et.getText().toString().trim(); if (TextUtils.isEmpty(str)) { Toast.makeText(this, "内容不能为空", 1).show(); return; } long aa = Long.valueOf(str); if (aa==0) { // 弹出对话框 AlertDialog.Builder alert = new AlertDialog.Builder(this); alert.setTitle("标题"); // 图标 alert.setIcon(R.drawable.tabbar_home_highlighted); alert.setMessage("提示信息,输入不能为0"); // 注意要倒的包不是view alert.setPositiveButton("确定", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { Toast.makeText(MainActivity.this, "你点击了确定", 0).show(); } }); alert.setNegativeButton("取消", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { // TODO Auto-generated method stub Toast.makeText(MainActivity.this, "取消被你点击了", 0).show(); } }); // show一下 alert.show(); } // 当点击按钮时跳转 Intent intent = new Intent(); intent.setClass(MainActivity.this, Miao.class); intent.putExtra("key", aa); Log.i("gxx", aa+""); // 带返回值的跳转第一个是intent对象,第二个是请求标记 startActivityForResult(intent, 1); // 销毁该页面 // finish(); } // 接收返回的参数 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 第一个请求码,第二个返回码,第三个intent数据 if (requestCode==1&&resultCode==2) { // 注意这里接收基本数据类型失败,这样写也可以 int[] ss = data.getIntArrayExtra("wan"); tv.setText("1970.1.1的零点开始到您指定时间是"+ss[0]+"秒"); } } }
3,要跳转的Activity
package com.example.intentdemo01; import android.app.Activity; import android.content.Intent; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.util.Log; import android.widget.TextView; import android.widget.Toast; public class Miao extends Activity { private TextView tv; private Handler handle = new Handler(){ public void handleMessage(android.os.Message msg) { // 更新UI switch (msg.what) { case 1: int a = msg.arg1; tv.setText(a+""); break; } } }; @Override protected void onCreate(Bundle savedInstanceState) { // TODO Auto-generated method stub super.onCreate(savedInstanceState); // 加载这个布局 setContentView(R.layout.main_miao); tv = (TextView) findViewById(R.id.meiID); initresult(); } // 处理请求并且返回 private void initresult() { Thread t = new Thread(){ @Override public void run() { Intent intent = getIntent(); long dangqian = intent.getLongExtra("key", 0); Log.i("gxx", dangqian+"dangqian"); // 暂停几秒跳转 int a=10; while (a>=0) { Log.i("gxx", "小BUG到此一游"); try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } a--; Message msg = handle.obtainMessage(); msg.arg1 = a; msg.what = 1; handle.sendMessage(msg); } // 未来的时间 // long weilai = dangqian+System.currentTimeMillis(); // 时间差 // int cha = (int) (weilai-System.currentTimeMillis()); // 1000毫秒为1秒,转换成秒 int aaa = (int) (dangqian+System.currentTimeMillis()); int[] b = new int[5]; // 输入时间差 b[0] = aaa/1000; intent.putExtra("wan", b); // 返回标记为2 setResult(2,intent); // 销毁页面 finish(); } }; t.start(); } }
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <TextView android:id="@+id/meiID" android:layout_width="wrap_content" android:layout_height="wrap_content" android:gravity="center" android:textSize="50sp" /> </LinearLayout>