Я наконец-то нашел решение для этого, которое не включает 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 будет всегда (для некоторыхпричина) по какой-то причине запустить намерение ACTION_SEARCH с флагом Intent.FLAG_ACTIVITY_NEW_TASK
, но если этот флаг установлен, onActivityResult
никогда не будет (правильно) вызываться в исходной задаче.
Далее в вашем доступном для поискаActivity, вы просто вызываете setResult(Intent.RESULT_OK, resultBundle)
как обычно, когда пользователь выбирает элемент.
Наконец, вы реализуете onActivityResult(int requestCode, int resultCode, Intent data)
в своей исходной Activity и отвечаете соответствующим образом, когда resultCode
равен Intent.RESULT_OK
и requestCode
- это константа кода вашего запроса (AppConstants.ACTION_SEARCH_REQUEST_CODE
в данном случае).