2012-02-28 2 views
0

Итак, у меня есть это приложение с 4-мя различными видами деятельности:Как использовать Back Back для использования кнопки «Назад»?

  • А является основным видом деятельности с тремя кнопками для запуска B, C и D (я думаю, что люди используют, чтобы называть их подразделам деятельности).
  • Каждый вид деятельности имеет свой собственный макет, но я считаю, что это не относится к здесь.

Что я хочу сделать, это стандартное поведение большинства приложений. То есть:

  1. Я начинаю запускать приложение и видеть активность А.
  2. Затем я нажимаю кнопку, C, например, и активность C показан.
  3. Затем я нажимаю кнопку «Назад», и активность А отображается снова.

У меня есть пункты 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, но я пробовал все предложения, которые мог найти, и никто не работал. Я хотел объяснить свой собственный случай.

+0

Если вызывается A.onDestroy(), то нет способа получить A обратно в стеке действий (за исключением вызова A вручную, но он не будет в нужном месте в стеке). что вы делаете в onPause()? вы переопределили это? – stefan

+0

Операция A должна находиться в стеке. Используете ли вы функцию finish() при запуске нового действия? Я использовал это много, и единственное, что это делало, это установить свойство noHistory в манифесте. Я никогда не использовал android: launchMode = "standard", но не похоже, что это закрывает активность – colegu

+0

@stefan Я не переопределяю onPause. Я переопределяю onResume (именно там я раздуваю макет). Я заработал это, выполнив то, что вы сказали, называя А вручную, но это не так уж близко к элегантности ... –

ответ

0

Конечно, я должен делать что-то неправильно.

Я переопределял метод onWindowFocusChanged и уничтожал там активность, поэтому, конечно, он удалялся из стека.

Прошу прощения за то, что потратил время @stefan и @colegu.