Android(安卓)activity之间的跳转和传参
16lz
2021-01-26
最近做Android界面,对所用到的Activity的跳转和传参进行一个总结。
(一)跳转
从一个Activity到另一个Activity的跳转,使用Intent,有两种方法
- 无返回值的 startActivity(Intent Intent);方法;
- 有返回值的 startActivityForResult(Intent intent,int requestCode);方法。
1. 无返回值跳转,即从当前界面跳转到下一界面;
/* * 参数分析: * A.this——当前所在界面的类 * B.class——要跳转到的界面类 * */Intent intent = new Intent(A.this, B.class);startActivity(intent);
2. 有返回值跳转,即从当前界面跳转到下一界面,再从下一界面跳转回来;
public static final int requestCode = 1;//自定义申请码/* * 参数分析 * A.this——当前所在界面的类 * B.class——要跳转到的界面类 * /Intent intent = new Intent(A.this, B.class);/* * 参数分析 * requestCode——申请码,用于获得返回值,即由一个画面传数据到多个画面(相同的数据),完成不同的功能,此时的requestCode的可通过判断来获得返回值。 * */startActivityForResult(intent, requestCode );
注意:(1)需要在A类中重写onActivityResult方法。
/* * 获取从Activitya当中回调的消息 * @param requestCode 申请码 * @param resultCode 返回码 * @param data 回调的数据 * */@Overridepublic void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // 在申请码和返回码都符合的时候,接收返回的数据 if(requestCode == A.requestCode && resultCode == B.resultCode) { // TODO 接收数据data }}
(2)需要在B类中保存页面A,并在B类结束之前返回A类。
public static final int resultCode = 1;//自定义返回码final Intent intent = getIntent();//在B类中得到原来的activityintent.putExtra("name", "value");//在B类中设置返回值传到A类中B.this.setResult(resultCode, intent);// 跳转回原来的activityB.this.finish();// 一定要结束当前activity
(二)传参
startActivityForResult(intent,requestCode );方法是可以传参的:
(1)传递普通类型参数
A类传递参数:
// A类传递参数到B类public static final int requestCode = 1;//自定义申请码public static final String KEY = "key";Intent intent = new Intent(A.this, B.class);// 传递参数,参数类型可以是八大基本类型、String、八大基本类型的数组intent.putExtra(KEY, "value");startActivityForResult(intent, requestCode );
B类接收参数:(在B类的onCreate()方法中)
// B类接收数据final Intent intent = getIntent();Bundle bundle = intent.getExtras();// 接收参数,参数类型可以是八大基本类型、String、八大基本类型的数组Object a = bundle.getString(A.KEY);
(2)传递List类型参数
A类传递参数:
public static final String KEY = "key";List list = new ArrayList<>();// T必须是实现了Serializable接口的类Intent intent = new Intent(A.this, B.class);intent.putExtra(KEY, (Serializable) list);startActivity(intent);
B类接收参数:(在B类的onCreate()方法中)
final Intent intent = getIntent();List list = (List) intent.getSerializableExtra(A.KEY);
(3)传递Map类型参数
A类传递参数:
public static final String KEY = "object";// SerializableHashMap必须是实现了Serializable接口的类SerializableHashMap myMap = new SerializableHashMap();Intent intent = new Intent(A.this, B.class);myMap.setMap(targetMap);//将hashmap数据添加到封装的myMap中Bundle bundle=new Bundle();bundle.putSerializable(KEY, myMap);intent.putExtras(bundle);startActivity(intent);
B类接收参数:(在B类的onCreate()方法中)
Bundle bundle = getIntent().getExtras();SerializableHashMap serializableHashMap = (SerializableHashMap) bundle.get(A.KEY);targetMap = serializableHashMap.getMap();
更多相关文章
- android 界面传值
- Android(安卓)camera preview and take picture with V4l2
- Android(安卓)下的EXIF
- Android类参考---Fragment(八)
- Fragment(二)-----分析执行的过程篇
- android BatteryManager电池管理
- android中menu.add()的使用说明
- 2011年沈大海讲师Android的腾讯微博客户端源代码,实现oauth_verif
- [置顶] android 实现发送彩信方法 (MMS),非调用系统彩信界面