Как использовать единую вершину в навигации Android

Я создаю нижнюю панель навигации с двумя меню (1,2) и двумя фрагментами, где активность содержит нижнее меню и фрагмент navhost с navgraph. Вот требуемый рабочий процесс (точно такой же, как текущее обновленное мобильное приложение Facebook)

активность начинается с fargment1, пользователь просматривает список элементов в режиме просмотра корзины

Когда элемент просмотра повторного использования находится на 15-м элементе фрагмента1, пользователь нажимает элемент меню2, отображается фрагмент2, где снова просматривается другой список элементов в повторном просмотре.

когда пользователь нажимает кнопку «Назад» или элемент меню1, фрагмент1 должен возобновляться с 15-го элемента.

из меню1, когда пользователь нажимает меню2, фрагмент2 должен возобновиться с левого элемента.

Вот как я это закодировал,

Переход от frag1 к frag2, popbehaviour:frag1;inclusive:false, singletop: true

Переход от frag2 к frag1, popbehaviour:frag1;inclusive:false, singletop: true

Итак, что происходит, когда я пытаюсь нажать меню1 из меню2, это всплывающее поведение создает новый экземпляр frag1 и удаляет старый экземпляр frag1, поскольку для singletp установлено значение true.

если я удаляю одну вершину, многие экземпляры создаются при нажатии кнопки «Назад» из меню2, это сработало по назначению.

как установить popbehaviour и singletop для моего требуемого поведения.


person Surendar    schedule 28.12.2019    source источник


Ответы (1)


Попробуй это

  fm.beginTransaction().add(R.id.main_container, fragment2, "2").hide(fragment2).commit();
  fm.beginTransaction().add(R.id.main_container,fragment1, "1").commit();

А также

private BottomNavigationView.OnNavigationItemSelectedListener mOnNavigationItemSelectedListener = new BottomNavigationView.OnNavigationItemSelectedListener() {
    @Override
    public boolean onNavigationItemSelected(@NonNull MenuItem item) {
        switch (item.getItemId()) {
            case R.id.navigation_home:
                fm.beginTransaction().hide(active).show(fragment1).commit();
                active = fragment1;
                return true;

            case R.id.navigation_dashboard:
                fm.beginTransaction().hide(active).show(fragment2).commit();
                active = fragment2;
                return true;
        }
        return false;
    }
};
person VVB    schedule 28.12.2019
comment
Есть ли решение через navgraph вместо использования диспетчера фрагментов? потому что мой фрагмент navhost связан с navgraph - person Surendar; 28.12.2019