1

У меня действительно есть небольшая проблема с моим Android-приложением.Фрагментная навигация с навигационным ящиком

Мое приложение Содержит навигационный ящик, который используется для навигации внутри приложения. Для примера

Навигация выдвижные:

  1. Обзора
  2. Поиска
  3. Пользователи
  4. наполнять избирательные урны фальшивых бюллетеней

При запуске приложения, я загружу Обзор фрагмента. Если пользователь нажимает на другие товары, я изменю фрагменты с:

final FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
transaction.replace(R.id.frame_container, fragment, TAG); 
transaction.addToBackStack(null); 
transaction.commit(); 

Проблема теперь, когда пользователь переключается, например, от 1> 2> 4> 3 и их нажатием на спину ключ, он принесет ему только один фрагмент назад. 3> 4> 2> 1

Итак, я добавил код, который вернет его в Фрагмент 1 на каждом выходе.

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    int exit = 0; 


    if (keyCode == KeyEvent.KEYCODE_BACK) { 


     getFragmentManager().popBackStack(); 
     FragmentManager fm = getSupportFragmentManager(); 
     Fragment fragment = new Overview(); 
     fm.beginTransaction().add(R.id.frame_container, fragment).addToBackStack("fragBack").commit(); 
     return false; 
    } 
    return false; 
} 

Хорошо, сначала это было хорошо, но теперь я добавил еще несколько фрагментов на более глубоком уровне, но они should't вернуться к Фрагмент 1 на задней прессе.

Для примера

  1. Обзор (Главный Фрагмент)
  2. Поиск (Назад Ключ идет Вернуться к Фрагмент 1)
  3. пользователей (Back Key восходит к Фрагмент 1)
  4. Материала (Назад Ключ возвращается к фрагменту 1)

4.1 Детали (задний ключ возвращается к фрагменту 4. Материал) < 4.1.1 Подробнее (B ack Key возвращается к фрагменту 4.1)

Было бы хорошо, если бы у кого-то была идея, как я мог бы использовать навигацию в своем приложении.

Greetz

+0

Есть ли конкретная причина, по которой кнопка «Назад» ведет себя так? Обычно пользователи ожидали, что кнопка «Назад» перенесет их на предыдущий экран, а не на главный экран. – juunas

+0

'сделка.replace' собирается удалить ваш текущий фрагмент и добавить новый. Вы должны использовать 'transaction.add' при переходе на более глубокий уровень фрагмента, чтобы он был добавлен в стопку. – CodeMonkey

+0

Да, поэтому mainactivity из приложения - это обзор, и если вы перейдете от Обзор к настройкам, а затем в Search, вы не хотите возвращаться к настройкам, если вы нажмете обратно – AllesFAM

ответ

0

Ваш код правильный и нужно изменить логику. Всякий раз, когда вы идете от navigationdrawer, сначала очистить все фрагменты в стеке, используя этот код

private void clearBackStack() { 
    FragmentManager manager = getSupportFragmentManager(); 
    manager.popBackStackImmediate(null, FragmentManager.POP_BACK_STACK_INCLUSIVE); 
} 

и второй, добавьте соответствующий выбранный (1 или 2 или 3) фрагмент в стек.

private void navigateToFragment(Fragment fragment, String TAG){ 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.replace(R.id.frame_container, fragment, TAG); 
    transaction.addToBackStack(null); 
    transaction.commit(); 
} 

И когда вы идете глубже, как 2 -> 2.1 -> 2.2, на backpress вы вернётесь 2.2 -> 2.1 -> 2. Не нужно переопределять метод onKeyDown() и снова добавлять фрагменты

+0

Идея хорошая, но когда я очищаю BackStack перед тем, как перейти к другому фрагменту, я не могу вернуться к фрагменту обзора, если нажата кнопка «Назад» – AllesFAM

+0

... затем переопределить метод onBackPressed() и проверить счетчик backstackentry, а если он равен 0, тогда позвоните в свой обзорный фрагмент –

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