我終於發現了一個不涉及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
在這種情況下)作出適當的反應。