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 класс насильственно закончен.

Другие вопросы по тегам