相信大家对startActivityForResult的用法已经烂熟于心了,不过笔者在未入门阶段还是不怎么了解这个机制。所以在做数据更新的时候,往往会多次请求不必要的数据,或者会缓存不必要的数据。android中已经存在页面跳转回调结果的机制了,何乐而不为呢。
一、正常地发起请求
1、定义你的请求码
private final static int ADDADDRESS = 0;//定义你的请求码
2、发起请求
tvAdd.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent it = new Intent(AddressBookAct.this, UpdateAddressAct.class);
it.putExtra("type", "0");
startActivityForResult(it, ADDADDRESS);
}
});
3、在本activity中复写onActivityResult方法
/**
* @param requestCode 请求码
* @param resultCode 结果码
* @param data 回传过来的Intent(携带数据)
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
//结果码为RESULT_OK
if (resultCode == RESULT_OK) {
//筛选请求码是哪个,做对应的操作
switch (requestCode) {
case ADDADDRESS:
//轻松获取数据,得data者得天下
String test1 = data.getStringExtra("test1");
String test2 = data.getStringExtra("test2");
doyourThings();//做你想做的事情
break;
case UPDATEADDRESS:
doyourThings();//做你想做的事情
break;
}
}
}
4、新页Activity在关闭前只需要填充好数据并设置结果码就可以了
//返回
ivBack.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent mIntent = new Intent();
mIntent.putExtra("test1", "1000");
mIntent.putExtra("test2", "2000");
// 设置结果码为RESULT_OK,并传递带数据的Intent
setResult(RESULT_OK, mIntent);
finish();//此处一定要调用finish()方法
}
});
总结:比较基础,但是很有用~也很好用,可以说一分钟就能理解startActivityForResult的用法