经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » 移动开发 » Android » 查看文章
Android Activity之间的数据传递【转载】 - DIY-Z
来源:cnblogs  作者:DIY-Z  时间:2020/12/14 17:10:16  对本文有异议

 
1、向目标Activity【Main2Activity】传递数据:

  1. Intent intent=new Intent(this,Main2Activity.class);
  2. //可传递多种类型的数据
  3. intent.putExtra("name","张三");
  4. intent.putExtra("age",12);
  5. startActivity(intent);

 
2、在目标Activity【Main2Activity】中取出数据

  1. Intent intent=getIntent();
  2. //用getXxxExtra()取出对应类型的数据。取出String只需要指定key
  3. String name=intent.getStringExtra("name");
  4. //取出int要指定key,还要设置默认值,当intent中没有该key对应的value时,返回设置的默认值
  5. int age=intent.getIntExtra("age",0);

 
 
 
 


在目标Activity【Main2Acitivity】销毁时,想让它可以回传数据给上一个Activity,这样需要改写前面的代码:
1、设置一个请求码标识当前Activity,让它跳转到目标Activity【Main2Activity】,

  1. Intent intent=new Intent(this,Main2Activity.class);
  2. //startActivityForResult()方法可以启动一个Activity,并可以设置一个int型的请求码标识当前Activity
  3. startActivityForResult(intent,1);

 
2、在目标Activity【Main2Activity】中回传数据

  1. //回传数据用得Intent可以新建,也可以用getIntent()
  2. Intent intent=new Intent();
  3. //设置要回传的数据
  4. intent.putExtra("name","张三");
  5. intent.putExtra("age",18);
  6. //设置结果码标识当前Activity,回传数据。不管多早调用这句代码,这句代码在当前Activity销毁时才会执行,即此Activity销毁时才会回传数据。请求码和结果码不必相同。
  7. setResult(1,intent);

回传时会把请求码、结果码、Intent数据封装为一个整体回传,请求码+结果码唯一标识回传的Intent
 
3、在上一级Activity中取出回传的数据
上一级Activity使用   startActivityForResult()  开启目标Activity后,当目标Activity销毁时,会向上一级Activity回传数据,并回调上一级  Activity的   onActivityResult()   方法。
我们需要重写上一级Activity的   onActivityResult()   方法获取回传数据。

  1. //重写上一级Activity的onActivityResult()方法来获取目标Activity回传的数据
  2. //三个形参,请求码、结果码、目标Activity回传的Intent
  3. @Override
  4. protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
  5. //调用基类的方法,此句代码会自动生成
  6. super.onActivityResult(requestCode, resultCode, data);
  7. if(requestCode==1){ //如果请求码是当前Activity的
  8. if(resultCode==1){ //如果结果码是某个目标Activity的,就取出对应的数据。这个判断主要是可能有多个目标Activity向当前Activity回传数据,这些Intent数据中可能具有相同的key
  9. String name=data.getStringExtra("name");
  10. int age=data.getIntExtra("age",0);
  11. }
  12. }
  13. }

 
如过上一级Activity开启了多个目标Activity,回传数据时都是回调onActivityResult()方法,所以常常要根据结果码区分是哪个目标Activity回传的数据。如果只开启了一个目标Activity,则不必判断。
 
数据回传很常用,比如发微信朋友圈时,进入相册选择好图片后,会回传选择的图片的信息。
 

原文链接:http://www.cnblogs.com/KeepZ/p/14103701.html

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号