Intereting Posts
Цвет фона предпочтений Передать ArrayList из модуля android в ядро ​​в libgdx Освежающие производители (ClusterItems) в Google Maps v2 для Android Получают ли приемники радиопередатчиков Android время автономной работы? Блокировать исходящие SMS с помощью contentObserver У указанного ребенка уже есть родитель. Вы должны сначала вызвать removeView () родительского родителя (Android) Как изменить цвет разделителя в NavigationView? Android – Как загрузить фотографию с SD-карты на стену Facebook Когда вы строите проект андроида с помощью команды ant debug, у моего apk есть слово debug, прикрепленное к имени. Как я его изменяю? Преимущества использования Bundle вместо прямого намерения putExtra () в Android Прокрутка в Android с помощью WebView отлично работает Возможно ли, чтобы Encog или Neuroph запускались на Android? Android Studio не может запускать git, хотя на самом деле может Как обеспечить различные значки приложений для Android для разных шаблонов gradle buildTypes? Как запустить сценарий оболочки внутри приложения для Android?

Android Назад к первому фрагменту в навигационном устройстве

У меня есть приложение, которое имеет несколько фрагментов в NavigationDrawer.

Ниже мой код:

@Override public boolean onPrepareOptionsMenu(Menu menu) { // if nav drawer is opened, hide the action items boolean drawerOpen = mDrawerLayout.isDrawerOpen(mDrawerList); menu.findItem(R.id.action_search).setVisible(!drawerOpen); return super.onPrepareOptionsMenu(menu); } /** * Diplaying fragment view for selected nav drawer list item * */ private void displayView(int position) { // update the main content by replacing fragments fragment = null; switch (position) { case 0: fragment = new HomeFragment(); break; case 1: fragment = new GalleryFragment(); break; case 2: fragment = new ContactFragment(); break; default: break; } if (fragment != null) { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .replace(R.id.frame_container, fragment).commit(); // update selected item and title, then close the drawer mDrawerList.setItemChecked(position, true); mDrawerList.setSelection(position); setTitle(navMenuTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } else { // error in creating fragment Log.e("MainActivity", "Error in creating fragment"); } } @Override public void setTitle(CharSequence title) { mTitle = title; getActionBar().setTitle(mTitle); } /** * When using the ActionBarDrawerToggle, you must call it during * onPostCreate() and onConfigurationChanged()... */ @Override protected void onPostCreate(Bundle savedInstanceState) { super.onPostCreate(savedInstanceState); // Sync the toggle state after onRestoreInstanceState has occurred. mDrawerToggle.syncState(); } @Override public void onConfigurationChanged(Configuration newConfig) { super.onConfigurationChanged(newConfig); // Pass any configuration change to the drawer toggls mDrawerToggle.onConfigurationChanged(newConfig); } @Override public void onBackPressed() { if (fragment != null) { FragmentManager fragmentManager = getFragmentManager(); fragmentManager.beginTransaction() .add(R.id.frame_container, fragment).commit(); int position = 0; fragment = new HomeFragment(); // update selected item and title, then close the drawer mDrawerList.setItemChecked(position, true); mDrawerList.setSelection(position); setTitle(navMenuTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } else { // error in creating fragment Log.e("MainActivity", "Error in creating fragment"); } } 

Что это в основном делает, сначала идет HomeFragment, когда я хочу перейти к другому fragment MediaFragment и решить вернуться назад, нажав кнопку «Назад», я хочу перейти в HomeFragment, и когда я хочу закрыть приложение, снова нажав кнопку «Назад», он будет Теперь отклоняйте приложение так же, как приложение gmail. Как я могу это достичь? У меня возникла проблема с использованием кода, который я ввел в свой onBackPressed() . Всякий раз, когда я иду на другие фрагменты, HomeFragment – это тот, который показывает. Есть идеи? Ваша помощь будет принята с благодарностью.

ОБНОВЛЕНИЕ : До того, как я был в MediaFragment и нажал кнопку «Назад», он автоматически закрывает приложение. Это не должно быть, но он должен пойти в HomeFragment , и когда он находится в HomeFragment и я HomeFragment кнопку «Назад», он закроет приложение.

Вместо того, чтобы дублировать ваш код в onBackPressed, почему бы не просто отслеживать выбранную последнюю позицию?

 int selectedPosition = 0; private void displayView(int position) { ... // All your current code selectedPosition = position; } @Override public void onBackPressed() { if (selectedPosition != 0) { displayView(0); } else { super.onBackPressed(); } 

Почему бы просто не добавить фрагмент в backstack, когда вы совершаете транзакцию, как сказал @Raghunandan. См. Ниже код,

  if (fragment != null) { FragmentTransaction fragmentTransaction = getFragmentManager().beginTransaction() .replace(R.id.frame_container, fragment).commit(); //Changed from fragmentManager to FragmentTrasaction fragmentTransaction.addToBackStack(null); //this will add the fragment to backstack and hence pressing back will take to previous trasaction // update selected item and title, then close the drawer mDrawerList.setItemChecked(position, true); mDrawerList.setSelection(position); setTitle(navMenuTitles[position]); mDrawerLayout.closeDrawer(mDrawerList); } else { // error in creating fragment Log.e("MainActivity", "Error in creating fragment"); } 

Не добавляйте HomeFragment else, когда вы нажимаете назад, перед тем, как выйти из приложения, вы увидите пустую страницу (или что-то в этом роде) (вы должны снова нажать ее, чтобы не добавлять HomeFragment). Добавьте весь фрагмент отдельно от него в backstack, и вы сможете продолжить, как хотите. Кроме того, когда вы загружаете Activity из фрагмента, он автоматически поддерживается приложением в backstack, поэтому не нужно беспокоиться об этом.

Дайте мне знать, как это происходит по вашему требованию.