Android之Activity传值

来源:互联网 发布:用淘宝店铺可以贷款吗 编辑:程序博客网 时间:2024/06/06 04:35

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方法。