Я работаю над унаследованным проектом Android, который использует фрагменты. В mainactivity есть боковой ящик меню, который позволяет пользователю использовать список элементов, каждый из которых открывает новый фрагмент в другом файле.Поддержка кнопок в Android-фрагментах
Прямо сейчас, нажав кнопку «Назад», приложение внезапно закрывает приложение. Я хочу, чтобы кнопка «Назад» работала так, чтобы она вернула пользователя к ранее просмотренному фрагменту, и когда пользователь находится на самом первом просматриваемом фрагменте, нажатие кнопки «Назад» приведет к появлению окна подтверждения выхода приложения.
Я понимаю, что должен использовать addToBackStack(), но я не уверен, как его реализовать в моем коде.
Вот код, первоначально в mainactivity, когда выбран пункт:
FragmentManager fm = getFragmentManager();
switch (position) {
case 0:
if (fragmentManager.findFragmentById(R.id.content_frame != null) {
Fragment currentFragment = fragmentManager.findFragmentById(R.id.content_frame);
fm.befineTransaction().remove(currentFragment).commit();
fm.popBackStack(null, FragmentManager.POP_BACK_STACK_INCLUSIVE);
}
Item0 item1Fragment = new Item0();
fm.beginTransaction().replace(R.id.content_frame, item0Fragment).commit();
break;
корпус 1 года идентичны, за исключением Item0/item0Fragment ссылки заменяются на соответствующие им значения.
Я очень новичок в фрагментах, но из того, что я вижу, код сначала обнаруживает, имеет ли действие фрейм для фрагмента, и если да, то он удаляет текущий фрагмент и полностью очищает фрагмент обратно стек. Затем он создает новый фрагмент и заменяет текущий фрагмент на новый.
Вот мой код в настоящее время после некоторых изменений, и это похоже на работу, в течение нескольких проблем, которые я опишу после кода, за исключением:
FragmentManager fm = getFragmentManager();
FragmentTransaction ft = fm.beginTransaction();
switch (position) {
case 0:
Item0 item1Fragment = new Item0();
ft.replace(R.id.content_frame, item0Fragment).addToBackStack(null).commit();
break;
выше модифицированный код обеспечивает правильную навигацию, за исключением:
Когда я вернусь к самому первому фрагменту, нажмите кнопку «Назад», чтобы удалить этот фрагмент и отобразить пустой фрагмент на экране, а следующая кнопка «Назад» закроет приложение. Желательным поведением было бы то, что нажатие кнопки «Назад» на самом первом фрагменте вызовет кнопку подтверждения, чтобы закрыть приложение.
Когда элементы в боковом меню выбраны и выбраны, я вызываю mItemList.setItemChecked (позиция). Как я могу вызвать обновление, когда кнопка «Назад» выбрана так, что выбран предыдущий выбор?
Кто-нибудь знает, как сделать эту работу?
Спасибо.
Это не рекомендуется правилами проектирования Android. Если вы используете навигационный ящик, страницы, которые вы можете посетить из ящика, рассматриваются как навигация верхнего уровня. Если внутри конкретной страницы есть какие-либо кнопки или клики, которые позволяют пользователю получить подробный вид (не-верхний уровень навигации) или что-то в этом роде, пользователь должен иметь возможность использовать кнопку «Назад», чтобы вернуться к началу страницы, уровня. Не используйте кнопку «Назад» для перехода с страницы верхнего уровня на предыдущую страницу верхнего уровня. http://developer.android.com/design/patterns/navigation.html –
Также ознакомьтесь с этим http://developer.android.com/design/patterns/navigation-drawer.html –
OK, So для моего случая мой верхний уровень состоит из item1Fragment, item2Fragment и т. д.Внутри каждого фрагмента я могу перемещаться по подстраницам, кнопка «Назад» приведет меня от одной субстраницы к предыдущей. Однако, как только я снова появлюсь на странице верхнего уровня, где мне должна вернуться кнопка «Назад»? Например, если при запуске приложения появляется страница верхнего уровня, это item1Fragment. Затем перейдите к item3Fragment, затем к подстраницам 1-3. Когда я нахожусь на субстранице 3, отбрасывание назад возвращается к подстранице2, подстранице-1, затем item3Fragment. Теперь, когда я нахожусь на странице верхнего уровня, где должна вернуться следующая кнопка назад? – user1118764