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? Или как еще этот преждевременный вызов может быть объяснен?

92
задан fawaad 10 November 2017 в 05:16
поделиться

2 ответа

Это исправлено путем изменения режима запуска на singleTop :

    <activity
        android:name=".MainActivity"
        android:launchMode="singleTop">

В Android есть ошибка / функция (?), Которая немедленно сообщает результат (который еще не был установлен) для Действие , объявленное как singleTask (несмотря на то, что действие продолжает выполняться). Если мы изменим launchMode родительского действия с singleTask на singleTop , все будет работать должным образом - результат будет сообщен только после завершения действия. Хотя такое поведение имеет определенное объяснение (может существовать только одно действие singleTask и для него может быть несколько ожидающих), это все еще не является логическим ограничением для меня.

251
ответ дан 24 November 2019 в 06:23
поделиться

Опять же, как и в комментарии Майры, setResult () не имеет ничего общего с делать со своей проблемой. по какой-то причине класс MyConfigure завершает свою работу, и когда это происходит, PreferenceActivity просто предполагает, что может быть результат от MyConfigure , потому что вы написали код именно так.

это также происходит, когда вы принудительно отключаете любое действие, начатое с startActivityForResult () ...

Итак, я думаю, что лучше сосредоточиться на том, почему ваш класс MyConfigure принудительно закончен.

-1
ответ дан 24 November 2019 в 06:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: