欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

Activity之间的数据传递

程序员文章站 2022-05-25 20:48:39
1、向目标Activity传递数据: 2、在目标Activity中取出数据 目标Activity销毁时,可以回传数据给上一个Activity: 1、启动目标Activity,并设置一个请求码标识当前Activity 2、在目标Activity中回传数据 回传时会把请求码、结果码、Intent数据封装 ......

 

1、向目标activity传递数据:

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

 

2、在目标activity中取出数据

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销毁时,可以回传数据给上一个activity:

1、启动目标activity,并设置一个请求码标识当前activity

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

 

2、在目标activity中回传数据

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,则不必判断。

 

数据回传很常用,比如发微信朋友圈时,进入相册选择好图片后,会回传选择的图片的信息。