这个问题通常发生在使用新的ActivityResultContracts API来启动另一个Activity并返回结果到Fragment时。在此情况下,Fragment的onActivityResult()方法将被弃用,并且将代之以Activity结果契约API。
为解决这个问题,必须在Activity结果契约API实现中确保正确的结果代码被传回。例如,在接收到结果时,在Activity中使用 setResult() 方法并传递 RESULT_OK 值。在另一个地方,在Fragment中,使用ActivityResultLauncher API来处理结果,然后检查返回的结果代码。
以下是示例代码,用于从一个Activity返回RESULT_OK值到Fragment:
在Activity中:
ActivityResultLauncher someActivityResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_OK) {
Intent data = result.getData();
// pass data to the fragment or do something else with it
}
});
// Start the activity by calling someActivityResultLauncher.launch()
在Fragment中:
ActivityResultLauncher someActivityResultLauncher = registerForActivityResult(
new ActivityResultContracts.StartActivityForResult(),
result -> {
if (result.getResultCode() == RESULT_OK) {
Intent data = result.getData();
// do something with the returned data
}
});
// Start the activity by calling someActivityResultLauncher.launch()
在上述示例中,我们使用ActivityResultLauncher API来处理启动并返回结果的Activity。如果结果代码为RESULT_OK,则在Fragment中执行某些操作。
希望这能帮助你解决此问题。