【Android】新版本Activity跳转新Activity返回后获取数据方式

在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();
OVER
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值