Я запускаю 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
class НЕ имеет setResult()
вызовов. Фактически, у MyConfigure
класса нет никакого кода, кроме того, OnCreate()
где он загружает настройки с помощью addPreferencesFromResource
.
Теперь onActivityResult
вызывается requestCode
из 1458
преждевременно, сразу после того, MyConfigure
деятельность выполняется. Проверено на эмуляторах 1.6 и 2.1, а также на устройстве 2.1. Есть ли призыв setResult()
где-нибудь похоронить PreferenceActivity
? Или как еще можно объяснить этот преждевременный звонок?
android
android-activity
Обратный звонок Евгения Маевского
источник
источник
Ответы:
Это исправляется изменением режима запуска на
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" из Activity, и все заработало как шарм. Не стоит менять это, если вы не знаете ТОЧНО, что понимает Android ... Android в этом смысле немного сложен.
источник
Это случилось со мной, когда у намерения был установлен
Intent.FLAG_RECEIVER_FOREGROUND
флаг.(Да, этот флаг не связан с активностью, но я использовал его во всех своих намерениях как часть решения другой проблемы .)
источник
Опять же, как и в комментарии Майры,
setResult()
это не имеет ничего общего с вашей проблемой. по какой-то причинеMyConfigure
класс завершает работу, и когда это происходит,PreferenceActivity
просто предполагает, что может быть результат,MyConfigure
потому что вы написали код именно так.это также происходит, когда вы принудительно отключаете любую активность, начатую с
startActivityForResult()
...Итак, я думаю, что лучше сосредоточиться на том, почему ваш
MyConfigure
класс принудительно завершен.источник