Android launchMode: переопределение одиночной задачи - PullRequest
0 голосов
/ 05 ноября 2011

У меня есть два действия Main и SearchEvent. У основного действия есть режим запуска: "singleTask", и нет никакого специального параметра, связанного с действием SearchEvent.

Когда я нажимаю кнопку, присутствующую в главном действии, действие SearchActivity запускается на переднем плане и отображает список событий. Когда я нажимаю на один из элементов списка, элементы должны получить eventId и начать действие Main.class, но поскольку Main.class уже присутствовал в стеке, он помещается сверху, но убивает SearchActivity (я вижу, что onDestroy метод называется).

Я не хочу, чтобы метод onDestroy для SearchEvent вызывался, и только действие SearchEvent переходит в фоновый режим, а всплывет главное действие.

Также, если я попытаюсь использовать launchMode = "singleTop", он запустит еще один экземпляр активности Main, который я не ищу.

Какую настройку включить, чтобы запустить тот же экземпляр Main и переместить SearchEvent в фоновом режиме?

Код в файле манифеста.

MainActivity

<activity
        android:configChanges="orientation"
        android:launchMode="singleTask"
        android:name=".Main"
        android:screenOrientation="portrait"
        android:theme="@style/Theme.CustomDialog" >
        <intent-filter >
            <action android:name="android.intent.action.VIEW" />
        </intent-filter>
        <intent-filter >
            <action android:name="android.intent.action.SEND" >
            </action>

            <category android:name="android.intent.category.DEFAULT" >
            </category>

            <data android:mimeType="image/*" >
            </data>
        </intent-filter>
        <intent-filter >
            <action android:name="android.intent.action.SEND" >
            </action>

            <category android:name="android.intent.category.DEFAULT" >
            </category>

            <data android:mimeType="video/*" >
            </data>
        </intent-filter>
    </activity>
    <activity>

ПоискEvent code

<activity
            android:configChanges="orientation"
            android:label="@string/app_name"
            android:name="SearchEvent"
            android:screenOrientation="portrait"
            android:theme="@style/Theme.CustomDialog1" >
            <intent-filter >
                <action android:name="android.intent.action.VIEW" />
            </intent-filter>
        </activity>

Код, используемый для вызова основной активности в первый раз.

Intent mainIntent = new Intent(SignIn.this, Main.class);
startActivity(mainIntent);

Код для вызова SearchEvent из основной активности

Intent searchActivity = new Intent(Main.this, SearchEvents.class);
startActivity(searchActivity);

Код для повторного вызова Основная активность из действия SearchEvents

Intent mainIntent = new Intent(SearchEvents.this, Main.class);
startActivity(mainIntent);

1 Ответ

0 голосов
/ 21 марта 2012

Если поисковое действие должно показывать пользователю список событий, и пользователь должен выбрать одно, а затем вызвать основное действие с этим результатом, вы, вероятно, захотите сделать это по-другому.

Если я правильно понимаю, вы, вероятно, хотите, чтобы основное действие запустило поисковое действие, используя startActivityForResult(), и чтобы поисковое действие просто возвращало выбранное событие в основное действие, используя setResult(), когда оно завершится. Таким образом, поисковое действие не должно начинать основное действие снова, оно просто «возвращается к нему».

...