从 Android 10(API 级别 29)开始,'startActivityForResult()' 方法已被标记为过时(deprecated)。取而代之的是使用 'registerForActivityResult()' 方法来处理活动结果。

以下是使用 'registerForActivityResult()' 方法来替代 'startActivityForResult()' 的示例:

  1. 在 'MainActivity' 中定义一个 'ActivityResultLauncher' 对象:
private ActivityResultLauncher<Intent> mStartForResultLauncher = registerForActivityResult(
    new ActivityResultContracts.StartActivityForResult(),
    result -> {
        if (result.getResultCode() == RESULT_OK) {
            Intent data = result.getData();
            // 处理返回结果
            // ...
        }
    }
);
  1. 在需要启动 'EditActivity' 的地方,使用 'mStartForResultLauncher' 来启动活动:
Intent intent = new Intent(MainActivity.this, EditActivity.class);
mStartForResultLauncher.launch(intent);
  1. 在 'EditActivity' 中,使用 'setResult()' 方法设置返回结果,并在 'finish()' 之前调用 'mStartForResultLauncher' 的 'launch()' 方法:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        String content = et.getText().toString().trim();
        if (content.isEmpty()) {
            content = 'Default Content';
        }
        String time = dateToStr();

        Intent intent = new Intent();
        intent.putExtra('content', content);
        intent.putExtra('time', time);
        setResult(RESULT_OK, intent);
        finish();
        return true;
    }
    return super.onKeyDown(keyCode, event);
}

通过使用 'registerForActivityResult()' 方法,你可以更方便地处理活动结果,而无需使用过时的 'startActivityForResult()' 方法。请注意,'ActivityResultLauncher' 的使用可能会因你的具体需求而有所不同,你可以根据自己的情况进行调整。

Android 10+ ActivityResultLauncher 替代 startActivityForResult() 方法

原文地址: https://www.cveoy.top/t/topic/bBHJ 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录