onActivityResult() вызывается преждевременно
Я начинаю Activity
(потомок PreferenceActivity
) из моей рабочей деятельности следующим образом:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
if (requestCode == 1458)
loadInfo();
}
void showSettingsDialog()
{
startActivityForResult(new Intent().setClass(this, MyConfigure.class), 1458);
}
MyConfigure
класс не имеет каких-либо setResult()
звонки. По факту, MyConfigure
класс не имеет никакого кода, кроме OnCreate()
где он загружает настройки, используя addPreferencesFromResource
,
Сейчас onActivityResult
называется с requestCode
из 1458
преждевременно, сразу после MyConfigure
деятельность запущена. Проверено на эмуляторах 1.6 и 2.1, а также на устройстве 2.1. Есть ли звонок setResult()
похоронен где-то в PreferenceActivity
? Или как еще объяснить этот преждевременный вызов?
5 ответов
Это исправлено изменением режима запуска на singleTop
:
<activity
android:name=".MainActivity"
android:launchMode="singleTop">
В Android есть ошибка / функция (?), Которая немедленно сообщает о результате (который еще не установлен) для Activity
объявлен как singleTask
(несмотря на то, что активность продолжает работать). Если мы изменим launchMode
родительской деятельности от singleTask
в singleTop
все работает как положено - результат сообщается только после завершения действия. Хотя такое поведение имеет определенное объяснение (только одно singleTask
активность может существовать и может случиться с несколькими официантами), для меня это все еще не логическое ограничение.
Я решил свою проблему после удаления intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
перед звонком fragment.startActivityForResult(intent, 0);
,
Я просто удалил все свои собственные "android:launchMode" из моей деятельности, и все работало как шарм. Это не очень хорошая идея, если вы не знаете ТОЧНО, что понимает Android... Android немного сложнее в этом смысле.
Это случилось со мной, когда намерение Intent.FLAG_RECEIVER_FOREGROUND
флаг установлен.
(Да, этот флаг не связан с деятельностью, но я имел его во всех своих намерениях как часть решения дробовика для другой проблемы.)
Опять же, как в комментарии Майры, setResult()
не имеет ничего общего с вашей проблемой. по какой-то причине, MyConfigure
класс заканчивает сам и когда это происходит PreferenceActivity
просто предполагает, что может быть результатом MyConfigure
потому что так ты написал код.
это также происходит, когда вы возвращаете любую активность, начатую с startActivityForResult()
...
Итак, я думаю, что лучше сосредоточиться на том, почему ваш MyConfigure
класс насильственно закончен.