Android 10+ ActivityResultLauncher 替代 startActivityForResult() 方法
从 Android 10(API 级别 29)开始,'startActivityForResult()' 方法已被标记为过时(deprecated)。取而代之的是使用 'registerForActivityResult()' 方法来处理活动结果。
以下是使用 'registerForActivityResult()' 方法来替代 'startActivityForResult()' 的示例:
- 在 'MainActivity' 中定义一个 'ActivityResultLauncher' 对象:
private ActivityResultLauncher<Intent> mStartForResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_OK) {
Intent data = result.getData();
// 处理返回结果
// ...
}
}
);
- 在需要启动 'EditActivity' 的地方,使用 'mStartForResultLauncher' 来启动活动:
Intent intent = new Intent(MainActivity.this, EditActivity.class);
mStartForResultLauncher.launch(intent);
- 在 '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' 的使用可能会因你的具体需求而有所不同,你可以根据自己的情况进行调整。
原文地址: https://www.cveoy.top/t/topic/bBHJ 著作权归作者所有。请勿转载和采集!