Я запускаю 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
? Или как еще этот преждевременный вызов может быть объяснен?
Это исправлено путем изменения режима запуска на singleTop
:
<activity
android:name=".MainActivity"
android:launchMode="singleTop">
В Android есть ошибка / функция (?), Которая немедленно сообщает результат (который еще не был установлен) для Действие
, объявленное как singleTask
(несмотря на то, что действие продолжает выполняться). Если мы изменим launchMode
родительского действия с singleTask
на singleTop
, все будет работать должным образом - результат будет сообщен только после завершения действия. Хотя такое поведение имеет определенное объяснение (может существовать только одно действие singleTask
и для него может быть несколько ожидающих), это все еще не является логическим ограничением для меня.
Опять же, как и в комментарии Майры, setResult ()
не имеет ничего общего с делать со своей проблемой. по какой-то причине класс MyConfigure
завершает свою работу, и когда это происходит, PreferenceActivity
просто предполагает, что может быть результат от MyConfigure
, потому что вы написали код именно так.
это также происходит, когда вы принудительно отключаете любое действие, начатое с startActivityForResult ()
...
Итак, я думаю, что лучше сосредоточиться на том, почему ваш класс MyConfigure
принудительно закончен.