Android开发学习笔记之四大组件---Activity的跳转,数据传递(二)
上一章我们温习了Activity的创建,以及各生命周期,这一章我们主要学习Activity的跳转,以及Activity之间的数据传递
一、Activity跳转:
Activity之间的单纯跳转非常简单,只需要创建两个Activity,然后使用startActivity(intent)来进行跳转,看下代码:
Intent uio=new Intent(thisActivityclass,ActivityBclass); startActivity(uio);
Intent是什么?
Android中提供了Intent机制来协助应用间的交互与通讯,Intent负责对应用中一次操作的动作、动作涉及数据、附加数据进行描 述,Android则根据此Intent的描述,负责找到对应的组件,将 Intent传递给调用的组件,并完成组件的调用。Intent不仅可用于应用程序之间,也可用于应用程序内部的Activity/Service之间的 交互。因此,Intent在这里起着一个媒体中介的作用,专门提供组件互相调用的相关信息,实现调用者与被调用者之间的解耦。
二、Activity间数据传递:
以下我们完整编写一个Activity跳转传递数据及返回参数的例子,从Activity A中点击一个按钮,跳转至Activity B,Activity B中有两个按钮,分别点击两个按钮,界面返回到Activity A中并使用toast展示不同的返回参数
1.在Activity A中,批量添加数据至Bundle,并将Bundle添加进intent
Intent in1=new Intent(this,ActivityB.class); Bundle bun1=new Bundle(); bun1.putString("姓名", "baihua"); bun1.putString("年龄", "24"); in1.putExtras(bun1);
2.Activity A的按钮点击事件中进行Activity跳转,并使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,新的Activity关闭后会向前面的Activity传回数据
startActivityForResult(in1,30)
3.Acitivity B返回值后,我们需要得到新Activity的回传数据进行逻辑处理,需要重写onActivityResult(int requestCode,int resultCode,Intent data),这里我们定义一下功能需求,如果请求码是30,我们点击Activity B中的按钮,返回学号30的学生的信息,如果请求码是31,我们点击Activity B中的按钮,返回学号31的学生的信息;Activity B中,点击按钮1,返回该学号对应学生的姓名,点击按钮2,返回该学号对应学生的年龄
首先我们处理Activity B中的数据返回
public void baihinfo(View v) //对应学号学生的姓名 { Intent in1=new Intent(); in1.putExtra("姓名", "baih"); //in1.putExtra("年龄", "24"); setResult(2, in1); //使用setResult返回数据到Activity A中,前一个参数为返回结果码 finish(); //函数处理完后关闭该Activity } public void zzzinfo(View v) //对应学号学生的年龄 { Intent in2=new Intent(); //in2.putExtra("姓名", "zzz"); in2.putExtra("年龄", "28"); setResult(1, in2); finish(); //函数处理完后关闭该Activity }
4.处理Activity A中得到Activity B的返回结果码的逻辑,重写onActivityResult
public void onActivityResult(int requestCode,int resultCode,Intent data) { if(requestCode==30) //判断如果Activity A点击事件中的请求码是30,则返回学号30的学生 { if(resultCode==1) //判断如果返回结果码为1,就使用.getExtras().getString()获取30学生的姓名,为其他就获取年龄,这里逻辑可以更细,不多写了 { Bundle er=data.getExtras(); String t=er.getString("姓名"); Log.e("baih",t); Toast.makeText(MainActivity.this, t, 2000).show(); } else{ Bundle san=data.getExtras(); String y=san.getString("年龄"); Log.e("baih", y); Toast.makeText(MainActivity.this,y, 2000).show();; } } else{ if(requestCode==31) //判断如果Activity A点击事件中的请求码是31,则返回学号31的学生 { if(resultCode==1) { Bundle er1=data.getExtras(); String x=er1.getString("姓名"); Log.e("baih",x); Toast.makeText(MainActivity.this, x, 2000).show(); } else{ Bundle san1=data.getExtras(); String z=san1.getString("年龄"); Log.e("baih", z); Toast.makeText(MainActivity.this,z, 2000).show();; } } }
变量没有走规则,其实这个位置,主要是想介绍两个参数,requestCode和resultCode
requestCode是请求码,使用startActivityForResult(Intent intent, int requestCode)方法打开新的Activity,我们需要为startActivityForResult()方法传入一个请求码(第二个参 数)。请求码的值是根据业务需要由自已设定,用于标识请求来源。例如:一个Activity有两个按钮,点击这两个按钮都会打开同一个Activity, 不管是那个按钮打开新Activity,当这个新Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。在onActivityResult()方法如果需要知道新Activity是由那个按钮打开的,并且要做出相应的业务处理
resultCode是结果码,在一个Activity中,可能会使用startActivityForResult()方法打开多个不同的Activity处理不同的业务,当这些新 Activity关闭后,系统都会调用前面Activity的onActivityResult(int requestCode, int resultCode, Intent data)方法。为了知道返回的数据来自于哪个新Activity
两个很重要的参数,负责控制Activity数据传输之间的逻辑控制及判断
Activity传输数据主要使用intent.putExtra(String key,value)进行单个参数传递,或者将数据参数集中写入bundle中,使用intent.putExtra(Bundle extras)进行集中传输
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。