Задний стек Android в навигационном ящике с использованием действий

Я реализовал тестовый образец ящика Android, используя действия вместо фреймов, как в этом ответе SO.

У меня есть 3 действия, которые происходят из DrawerActivity.
MainActivity это первое действие при запуске приложения, ActivityA и ActivityB, которые открываются из панели навигации.

Я хочу, чтобы при нажатии кнопки «Назад» в MainActivity для выхода из приложения и при нажатии на ActivityA или ActivityB возвращаться к MainActivity, независимо от того, сколько раз нажимаются элементы списка из навигационного ящика.

Насколько я понимаю, проблема в том, что все действия, которые запускаются из навигационного ящика, добавляются в задний стек.

Также дополнительный вопрос заключается в том, как выделить элемент, выбранный в панели навигации, при изменении действий?
Я сделал это в другом примере, который использует фрагменты с этим кодом:

mDrawerList.setItemChecked(position, true);

Могу ли я использовать действия или мне нужно преобразовать их во фрагменты?


person Endri    schedule 27.04.2015    source источник


Ответы (1)


Создание новых действий при щелчке элемента Navigation Drawer встречается довольно редко. Используйте Activity с DrawerLayout внутри и обрабатывайте события кликов навигации, заменяя Fragments. См. также этот учебник:

http://developer.android.com/training/implementing-navigation/nav-drawer.html#top

person Jerry    schedule 27.04.2015
comment
Я использовал навигационный ящик с фрагментами и знаю, что то, что я хочу, не является обычным, но я хотел знать, возможно ли это сделать. - person Endri; 28.04.2015
comment
Это должно быть возможно. Вместо того, чтобы заменять Фрагмент на элементе, щелкните в панели навигации, создайте новое намерение и запустите действие. Однако это создаст новую активность без вашего предыдущего ящика навигации. Когда вы нажмете кнопку «Назад» в этом состоянии, вы остановите ActivityA (или ActivityB) и вернетесь к MainActivity. - person Jerry; 28.04.2015
comment
моя проблема в том, что когда ActivityA и AcrivityB нажимаются более одного раза, например A, B, A, B и т. д., и в этом примере, нажав назад, мы получили A - B - A - MainActivity. Вместо этого я хочу перейти к основному действию из последнего открытого действия, независимо от того, сколько раз оно было открыто раньше. Также я попытался открыть действия A и B с флагом FLAG_ACTIVITY_SINGLE_TOP. - person Endri; 29.04.2015
comment
Я до сих пор не понимаю, как вы можете попасть в ActivityB, когда из вашей MainActivity вы запускаете ActivityA. Я полагаю, вы не можете получить доступ к ActivityB прямо из ActivityA, или можете? Предположим, что действия A и B пусты. Из MainActivity в вашем Navigation Drawer вы можете запустить ActivityA. Хорошо, затем вернитесь и запустите ActivityB. Затем вернитесь, и вы снова в MainActivity. В чем проблема? :) - person Jerry; 01.05.2015
comment
Из MainActivity мы можем запустить оба действия A и B. И из каждого из них мы можем запустить A или B. Я реализовал навигационный ящик, и каждое действие расширяет его, поэтому вы можете перейти к любому действию в любое время, потому что навигационный ящик есть на всех виды деятельности. - person Endri; 01.05.2015
comment
Ах, да, я думал, что вы, возможно, реализовали это так. :) В основном у вас есть два варианта: 1. Вызвать метод finish() как в Activity A, так и в B после метода startActivity(intent). 2. Другой способ решить эту проблему — поместить android:noHistory=true в теги ActivityA и ActivityB в AndroidManifest.xml. Например: ‹Активность android:name=.ActivityA android:noHistory=true /› - person Jerry; 01.05.2015
comment
Спасибо большое. Оба они то, что мне было нужно. - person Endri; 01.05.2015
comment
Создание новых действий при щелчке элемента Navigation Drawer встречается довольно редко. Это вполне нормальный подход. - person Marian Paździoch; 21.08.2015