Правильно ли это использование фрагментов Android и NavigationDrawer?

Хотя я уже много лет работаю с Android, это мой первый раз, когда я использовал Fragments в реальном проекте. Поэтому я немного смущен: -P

Это приложение имеет NavigationDrawer с 4 основными разделами. Я использую только одно основное действие с Layout , у которого есть представление содержимого, которое я заменяю Fragments . Когда выбран параметр в NavigationDrawer , я создаю экземпляр Fragment и помещаю его в этот View содержимого. Я делаю что-то вроде этого:

  private class DrawerItemClickListener implements ListView.OnItemClickListener { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { selectItem(position); } } public static int drawerSelectedOption = 0; private void selectItem(int position) { drawerSelectedOption = position; Fragment fragment = null; switch (position) { case 0: fragment = new StoresFragment(); break; case 1: //promos case 2: fragment = new TransactionsFragment(); break; case 3: break; case 4: fragment = new Settings(); break; } FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction().replace(R.id.content_frame, fragment).commit(); // update selected item and title, then close the drawer mDrawerList.setItemChecked(position, true); setTitle(mSectionTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } 

Больше Fragments выталкиваются из каждого из основных Fragments NavigationDrawer . Таким образом, каждый из основных «экранов» имеет несколько подэкранов внутри, как показано ниже.

 Drawer __ Fragment 1.0 -- Fragment 1.1 -- Fragment 1.2 |__ Fragment 2.0 -- Fragment 2.1 -- Fragment 2.2 

Я выталкиваю эти внутренние Fragments из предыдущих меню Fragment ActionBar следующим образом:

 FragmentManager fragmentManager = getFragmentManager(); FragmentTransaction fragmentTransaction = fragmentManager.beginTransaction(); OrderCreateFragment fragment = new OrderCreateFragment(); fragmentTransaction.add(R.id.content_frame, fragment); fragmentTransaction.addToBackStack(null); fragmentTransaction.commit(); 

Я сталкиваюсь с несколькими проблемами, и поэтому я ищу некоторые советы по этому подходу:

  1. Я даже не знаю, как правильно управлять элементами меню ActionBar . У каждого Fragment есть свои собственные меню, и иногда они застревают в баре (т. Е. При переключении Fragments , нажимая на NavigationDrawer вместо возврата назад)
  2. StackBack следует полностью StackBack при выборе одной из опций NavigationDrawer . Я подозреваю, что мои беспорядочные элементы ActionBar связаны с этим, потому что Fragments хранятся в стеке как-то.

Итак, кто-нибудь может угодить любезному совету, является ли это подходящим подходом и как решать проблемы с помощью StackBack и ActionBar ?

UPDATE : Похоже, что очистка всего стека от метода selectItem решена двумя основными проблемами. Хотя мне все еще интересно слушать мнения об этом подходе.

Ну, я считаю, что лучший способ зависит от потребностей приложения. Учитывая два сценария

A-App имеет требование для навигации и нескольких действий с вложенной / глубокой навигацией. Тогда лучший подход – иметь базовую активность, которая имеет framelayout и navigationdrawer. Все действия расширяют / наследуют эту базовую активность. И для каждого вида деятельности раздуйте соответствующий макет и программно добавьте в framelayout контейнер baseActivity.
Навигация на заднем стекле проще.

B – Приложение имеет требование для навигации и только одноуровневой навигации. Затем можно использовать концепцию динамического добавления и замены фрагментов на одном Activity, который имеет навигационный ящик.

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

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

Intereting Posts
Добавление карт Google api v2 в существующий проект Android JUnit: определение другого подкласса приложения Не удалось передать проект андроида библиотеки на обновленный adt Android: фатальный сигнал 11 (SIGSEGV) на 0x00000000 (код = 1) на movie.draw Отладка веб-страницы в приложении Chrome Android с рабочего стола localhost с переадресацией портов Добавление пользовательских заголовков в запрос волейбола Возможно ли в android определить константы в XML, которые различаются в зависимости от конфигурации Как отображать веб-контент на iOS и Android с помощью QML Камера2 с SurfaceView Устройство Android BLE отключается через короткое время, код ошибки 8 MediaStore – Uri для запроса всех типов файлов (носителей и носителей) Проблема с заменой изображения Picasso при использовании с RecyclerView Android Keylogger Android.view.InflateException при использовании selectableItemBackground Развернуть / открыть прядильщик при щелчке другого элемента / виджета?