Я работаю над унаследованным проектом 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;
case 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(position). Как мне вызвать обновление, когда нажата кнопка «Назад», чтобы выбрать предыдущий выбор?
Кто-нибудь знает, как это сделать?
Спасибо.