最近做Android界面,对所用到的Activity的跳转和传参进行一个总结。
从一个Activity到另一个Activity的跳转,使用Intent,有两种方法
/*
* 参数分析:
* A.this——当前所在界面的类
* B.class——要跳转到的界面类
* */
Intent intent = new Intent(A.this, B.class);
startActivity(intent);
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 回调的数据
* */
@Override
public 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类中得到原来的activity
intent.putExtra("name", "value");//在B类中设置返回值传到A类中
B.this.setResult(resultCode, intent);// 跳转回原来的activity
B.this.finish();// 一定要结束当前activity
startActivityForResult(intent,requestCode );方法是可以传参的:
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);
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);
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();