Android activity之间的跳转和传参

最近做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           回调的数据
 * */
@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 );方法是可以传参的:

(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)