Android Activity和Intent
来源:互联网 发布:程序员的思维修炼 豆瓣 编辑:程序博客网 时间:2024/05/01 04:14
一个界面就是一个Activity,不同的界面之间切换(单纯的转向或是传递数据转向)均需要 Intent 媒介,并通过使用 startActivity(myintent)或者startActivityForResult(myintent)实现。举例如下:
代码1
//单纯切换界面Intent myintent = new Intent(this,otherPage.class);startActivity(myintent);
该段代码将从当前页面跳转到名为otherPage的界面。
如果要传递数据给下一个页面,需要将数据绑定至Intent中。
代码2
Intent myintent = new Intent(this,otherPage.class);myintent.putExtra(“MY_DATA_NAME_1”,MY_stringDATA_1);myintent.putExtra(“MY_DATA_NAME_2”,MY_stringDATA_2);startActivity(myintent);
如果传递的数据比较多,可以创建一个Bundle类,它是一种特别定义的Map类型,采用一名一值对应形式存储数据。
代码3
Bundle mybundle = new Bundle();mybundle.putString(“MY_DATA_NAME_1”,MY_stringDATA_1);mybundle.putString(“MY_DATA_NAME_2”,MY_stringDATA_2);mybundle.putInt(“MY_DATA_NAME_3”,MY_intDATA_3);Intent myintent = new Intent(this,otherPage.class);myintent.putExtras(mybundle);startActivity(myintent);
*注意红色字体,在加入Bundle类型的数据到Intent中时,需要用到putExtras()方法。
那么下一个页面该如何接受数据呢?对照代码2和代码3,分别看一下otherPage中的相关代码
对照代码2
Intent receiver = this.getIntent();String mydata1=receiver.getStringExtra(“MY_DATA_NAME_1”);String mydata2=receiver.getStringExtra(“MY_DATA_NAME_2”)
对照代码3
Bundle mydatas = this.getIntent().getExtras();String mydata1 = mydatas.getString(“MY_DATA_NAME_1”);String mydata2 = mydatas.getString(“MY_DATA_NAME_2”);int mydata3 = mydatas.getInt(“MY_DATA_NAME_3”);
那么,如果我们需要从下一个页面取得返回值,供前一个页面使用呢?看看下面的代码
代码4
private static final int TAG_A = 0;private static final int TAG_B = 1;//some other codes here …Intent myintent = new Intent(this,nextPageA.class);startActivityForResult(myintent,TAG_A);/* some other codes here … … … */protected void onActivityResult(int requestCode, int resultCode, Intent intent) { super.onActivityResult(requestCode, resultCode, intent); switch(requestCode){ case TAG_A: //do something break; case TAG_B: //do something break; } }
当使用startActivityForResult()方法时,都需要覆写onActivityResult()方法对返回值进行处理。注意startActivityForResult()中第二个int类型的参数,这个值是自定义的标记值,用来标记当前的intent。
如果一个页面需要进行多次不同的跳转,并都需要接受返回值时,这个标记值将非常有用。因为所有使用了startActivityForResult()方法所得到的返回值都会在onActivityResult函数中被接收到。可以看到在onActivityReslut函数中,使用了switch(request)来对标记值进行判断,用来确定接收到的是哪个intent所发出的。
再看看nextPageA中的代码,他是怎么执行返回值操作的。
Intent back = new Intent();back.putExtra(“BACK_DATA_NAME”,BACK_DATA);setResult(RESULT_OK,back);//usually end this activityfinish()
通过setResult()方法来执行返回值操作。数值依然绑定在intent中进行传送。
注意看setResult()方法中的第一个int类型参数,作用依然是标记值,用来判断执行成功与否。可以自定义,但必须从1开始(一般用不着自定义吧)。RESULT_OK是自带参数,它的值为-1,还有个自带参数RESULT_CANCELED,它的值为0。
当发生特殊情况,比如产生返回值的activity崩溃了,这个参数将自动设为RESULT_CANCELED。在接受返回值的activity中的onActivityResult()方法中,resultCode就是对应的这个标记值。
- Android Activity和Intent
- Android--Activity和Intent
- Android- Activity 和 Intent
- Android intent 和activity
- Android Activity和Intent机制
- Android Activity和Intent机制
- Android Activity和Intent机制
- Android Activity和Intent机制
- Android Activity和Intent机制
- Android Activity和Intent机制
- Android(3.Activity和Intent)
- Android Activity和Intent机制
- Android学习:Activity和Intent
- Android开发-Intent 和 Activity
- Android Activity和Intent机制
- Android Activity和Intent机制
- Android Activity和Intent机制
- Android Activity和Intent机制
- 用代码说话之-----用电磁炉炒菜时,想到的设计模式(命令模式和单例模式)
- 程序员放宽你的眼界
- Android中ViewGroup等容器控件的使用
- C语言运算符优先级详细列表
- 请问示波器中的trigger是干什么用的
- Android Activity和Intent
- 网络拷贝的文字在word中如何去掉背景色(转)
- NFL NEWS
- 让Putty很好的支持中文
- Perl function: moveDirectory
- Coordinator
- 固态哈希
- linux IPC-消息队列 的内核限制
- 完美的解决select只读的方法