在Activity跳转到新的Activity后,然后在新的Activity返回原来的Activity时,我们需要获取到从新的Activity获取到的数据,原来的做法是使用【startActivityForResult】,但是在新的Android版本中,此方法被废弃了。
原方案
使用【startActivityForResult】
FirstActivity跳转到TwoActivity
//FirstActivity跳转代码
Intent intent = new Intent(FirstActivity.this,TwoActivity.class);
startActivityForResult(intent,1000);
TwoActivity
//当此Activity退出时
Intent intent = new Intent();
intent.putExtra("returnFirst", "我回来了");
setResult(RESULT_OK,intent);
finish();
FirstActivity
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//这个1000就是要和我们跳转时传入的值要相等
if (requestCode == 1000 && resultCode == RESULT_OK) {
String strReturn = data.getStringExtra("returnFirst");
Log.e("FirstActivity","返回的数据:"+strReturn);
}
}
此时步骤就结束了,但是需要注意的是,我们在TwoActivity返回FirstActivity的时候,需要监听一下back返回键,不然我们从back键返回的时候是无法在FirstActivity获取到TwoActivity的数据的。
TwoActivity监听back返回键
@Override
public void onBackPressed() {
super.onBackPressed();
Intent intent = new Intent();
intent.putExtra("returnFirst", "我回来了");
setResult(RESULT_OK,intent);
finish();
}
新方案
FirstActivity
//activity跳转返回数据,新方法已经不需要传requestCode了
ActivityResultLauncher<Intent> intentActivityResult = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
new ActivityResultCallback<ActivityResult>() {
@Override
public void onActivityResult(ActivityResult result) {
if (result.getResultCode() == RESULT_OK) {
if (result.getData().getStringExtra("returnFirst") != null) {
String str = result.getData().getStringExtra("returnFirst");
Log.e(TAG, "返回数据: " + str);
//打印的数据为 ["我回来了"]
}
}
}
}
);
//页面跳转代码
Intent intent = new Intent(FirstActivity.this, TwoActivity.class);
intentActivityResult.launch(intent);
TwoActivity
Intent intent = new Intent();
intent.putExtra("returnFirst", "我回来了");
setResult(RESULT_OK, intent);
finish();