我终于发现了一个不涉及singleTop的解决方案。
首先,在你的活动,源于搜索,覆盖startActivityForResult:
@Override
public void startActivityForResult(@RequiresPermission Intent intent, int requestCode, @Nullable Bundle options) {
if (Intent.ACTION_SEARCH.equals(intent.getAction())) {
int flags = intent.getFlags();
// We have to clear this bit (which search automatically sets) otherwise startActivityForResult will never work
flags &= ~Intent.FLAG_ACTIVITY_NEW_TASK;
intent.setFlags(flags);
// We override the requestCode (which will be -1 initially)
// with a constant of ours.
requestCode = AppConstants.ACTION_SEARCH_REQUEST_CODE;
}
super.startActivityForResult(intent, requestCode, options);
}
Android将永远(出于某种原因)与Intent.FLAG_ACTIVITY_NEW_TASK
标志启动ACTION_SEARCH意图,出于某种原因,但如果该标志是设置,onActivityResult
将永远不会(正确)在您的原始任务中调用。
接下来,在您的可搜索Activity中,您只需在用户选择某个项目时调用setResult(Intent.RESULT_OK, resultBundle)
即可。
最后,你实现你的原始活动onActivityResult(int requestCode, int resultCode, Intent data)
当resultCode
是Intent.RESULT_OK
和requestCode
是你请求的代码不变(AppConstants.ACTION_SEARCH_REQUEST_CODE
在这种情况下)作出适当的反应。