Итак, у меня есть это приложение с 4-мя различными видами деятельности:Как использовать Back Back для использования кнопки «Назад»?
- А является основным видом деятельности с тремя кнопками для запуска B, C и D (я думаю, что люди используют, чтобы называть их подразделам деятельности).
- Каждый вид деятельности имеет свой собственный макет, но я считаю, что это не относится к здесь.
Что я хочу сделать, это стандартное поведение большинства приложений. То есть:
- Я начинаю запускать приложение и видеть активность А.
- Затем я нажимаю кнопку, C, например, и активность C показан.
- Затем я нажимаю кнопку «Назад», и активность А отображается снова.
У меня есть пункты 1 и 2 правильно, но на 3 приложение исчезает.
OnClick метод кнопок есть что-то вроде этого:
startActivity(new Intent(this,C.class));
Ни один из видов деятельности не подменяет onBackPressed метод.
Здесь (часть) мой файл манифеста:
<activity android:name=".A" android:label="A" android:launchMode="standard" android:theme="@android:style/Theme.NoTitleBar" android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
</activity>
<activity android:name=".B" android:label="B" android:launchMode="standard" android:theme="@android:style/Theme.NoTitleBar" android:screenOrientation="portrait"/>
<activity android:name=".C" android:label="C" android:launchMode="standard" android:theme="@android:style/Theme.NoTitleBar" android:screenOrientation="portrait"/>
<activity android:name=".D" android:label="D" android:launchMode="standard" android:theme="@android:style/Theme.NoTitleBar" android:screenOrientation="portrait"/>
Я знаю, от отладки работы я сделал, что A.onDestroy() вызывается после того, как метод OnClick кнопки называется. Основываясь на этой информации, я думаю, что, и, конечно, я могу ошибаться, активность A по какой-либо причине удаляется из стека истории операционной системой.
Теперь я знаю, что эта проблема уже была рассмотрена здесь в stackoverflow, но я пробовал все предложения, которые мог найти, и никто не работал. Я хотел объяснить свой собственный случай.
Если вызывается A.onDestroy(), то нет способа получить A обратно в стеке действий (за исключением вызова A вручную, но он не будет в нужном месте в стеке). что вы делаете в onPause()? вы переопределили это? – stefan
Операция A должна находиться в стеке. Используете ли вы функцию finish() при запуске нового действия? Я использовал это много, и единственное, что это делало, это установить свойство noHistory в манифесте. Я никогда не использовал android: launchMode = "standard", но не похоже, что это закрывает активность – colegu
@stefan Я не переопределяю onPause. Я переопределяю onResume (именно там я раздуваю макет). Я заработал это, выполнив то, что вы сказали, называя А вручную, но это не так уж близко к элегантности ... –