Android之Activity传值
app开发经常会使用到一些界面的跳转和传值,可以使用intent实现界面的跳转和传值。
最常见的Intent跳转示例:
Intent intent = new Intent(A.this, B.class);
startActivity(intent);
或:
Intent intent = new Intent();
intent.setClass(A.this, B.class);
startActivity(intent);
最常见的Intent传值示例:
Intent intent = new Intent(A.this, B.class);
intent.putExtra("Name", "feng88724");
startActivity(intent);
Intent传多个值示例:
Intent intent = new Intent(A.this, B.class);
intent.putExtra("Name", "feng88724");
intent.putExtra("Pass", "12345678");
startActivity(intent);
Intent intent = new Intent(A.this, B.class);
/* 通过Bundle对象存储需要传递的数据 */
Bundle bundle = new Bundle();
/*字符、字符串、布尔、字节数组、浮点数等等,都可以传*/
bundle.putString("Name", "feng88724");
bundle.putExtra("Pass", "12345678");
/*把bundle对象assign给Intent*/
intent.putExtras(bundle);
startActivity(intent);
接收值示例:
/*获取Intent中的Bundle对象*/
Bundle bundle = this.getIntent().getExtras();
/*获取Bundle中的数据,注意类型和key*/
String name = bundle.getString("Name");
String pass= bundle.getBoolean("Pass");
或:
String name =this.getIntent().getStringExtra("Name");
String pass =this.getIntent().getStringExtra("Pass");
如果在页面跳转之后,需要返回到之前的页面,同时要保留用户之前输入的信息,单独使用intent跳转实现不了。intent跳转到新的页面后,前一个activity会被Destoryer,在将值传回来他将是一个新的页面。这里我们可以使用onActivityResult()方法将跳转之前的activity页面从新唤醒。
从A页面跳转到B页面时,不可以使用"startActivity()"方法,而要使用"startActivityForResult"方法。
在A页面的Activity中,需要重写"onActivityResult"方法
A页面:
@Override
protected void onActivityResult(int requestCode,int resultCode,Intent data){
super.onActivtiyResult(requestCode,resultCode,data);
if(requestCode==RESULT_OK){
if(null!=data){
//这里接受回传的值
}
}
}
B页面:
Intent intent = new Intent(B.this,A.class);
/*给上一个Activity返回结果*/
B.this.setResult(RESULT_OK,intent);
/*结束本Activity*/
B.this.finish();
利用onNewIntent避免Activity之间的跳转传值多次实体化
转载:http://www.cnblogs.com/fuyouG/p/fuyou-G-entryName.html
onNewIntent
需要注意的是:
1、通过Intent启到一个Activity的时候,就算已经存在一个相同的正在运行的Activity,系统也会创建一个新的Activity实例。为了不让Activity实例化多次,我们需要通过在AndroidManifest.xml配置启动方式。
2、launchMode为singleTask的时候,通过Intent跳到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候----------系统就不会再调用onCreate方法,而是调用onNewIntent方法。
能用到的地方是A-->B-->C-->A,此时onActivityResult就有些复杂了。 例如:
1、点击 设置密码(A),跳到 设置密码页面(B),输入密码;
2、点击完成 跳到 确定密码页面(C),输入密码,设置成功后返回到设置页面(A)并带回一个状态,此时(A)中的“设置密码”变成“修改密码”;
3、用户设置过密码后,此页面就变成了“修改密码”的选项
4、C跳到A,这个A我们要用以前栈中已有的,不能再去新建一个A的实例,所以需要在AndroidManifest.xml配置activity的启动方式以实现单任务模式。每步的跳转中,我们不能finish掉上一步Activity,否则按返回键时,用户体验不好。。。。这时就需要onNewIntent了。当然这只是我的一个思路。
首先在AndroidManifest.xml配置activity的启动方式以实现单任务模式
先看第二个SecondActivity,它需要把值传到FirstActivity。
再来看FirstActivity
此时没有走onCreat方法,但是为了以防万一,最好在onCreat方法里也写上操作,因为后台运行的Activity可能在内存过高时被系统杀掉,这时就会走onCreat方法。