2014-03-05 4 views
0

Я работаю над унаследованным проектом 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; 

выше модифицированный код обеспечивает правильную навигацию, за исключением:

  1. Когда я вернусь к самому первому фрагменту, нажмите кнопку «Назад», чтобы удалить этот фрагмент и отобразить пустой фрагмент на экране, а следующая кнопка «Назад» закроет приложение. Желательным поведением было бы то, что нажатие кнопки «Назад» на самом первом фрагменте вызовет кнопку подтверждения, чтобы закрыть приложение.

  2. Когда элементы в боковом меню выбраны и выбраны, я вызываю mItemList.setItemChecked (позиция). Как я могу вызвать обновление, когда кнопка «Назад» выбрана так, что выбран предыдущий выбор?

Кто-нибудь знает, как сделать эту работу?

Спасибо.

+0

Это не рекомендуется правилами проектирования Android. Если вы используете навигационный ящик, страницы, которые вы можете посетить из ящика, рассматриваются как навигация верхнего уровня. Если внутри конкретной страницы есть какие-либо кнопки или клики, которые позволяют пользователю получить подробный вид (не-верхний уровень навигации) или что-то в этом роде, пользователь должен иметь возможность использовать кнопку «Назад», чтобы вернуться к началу страницы, уровня. Не используйте кнопку «Назад» для перехода с страницы верхнего уровня на предыдущую страницу верхнего уровня. http://developer.android.com/design/patterns/navigation.html –

+0

Также ознакомьтесь с этим http://developer.android.com/design/patterns/navigation-drawer.html –

+0

OK, So для моего случая мой верхний уровень состоит из item1Fragment, item2Fragment и т. д.Внутри каждого фрагмента я могу перемещаться по подстраницам, кнопка «Назад» приведет меня от одной субстраницы к предыдущей. Однако, как только я снова появлюсь на странице верхнего уровня, где мне должна вернуться кнопка «Назад»? Например, если при запуске приложения появляется страница верхнего уровня, это item1Fragment. Затем перейдите к item3Fragment, затем к подстраницам 1-3. Когда я нахожусь на субстранице 3, отбрасывание назад возвращается к подстранице2, подстранице-1, затем item3Fragment. Теперь, когда я нахожусь на странице верхнего уровня, где должна вернуться следующая кнопка назад? – user1118764

ответ

1

Вы проверили разработчика. Вот как они объясняют. http://developer.android.com/training/implementing-navigation/temporal.html#back-fragments

+0

У меня есть, но они используют getSupportFragmentManager(), который из файла android.support.v4.app.FragmentManager, а не файла android.app.FragmentManager, который я использую. – user1118764

+0

@ user1118764 Читайте здесь внимательно. // Работает либо с инфраструктурой FragmentManager, либо с // поддержкой пакета FragmentManager (getSupportFragmentManager). – osayilgan

+0

Они объяснили это этими комментариями прямо над кодом. – osayilgan

Смежные вопросы