У меня есть настройка из 3 фрагментов в моей основной деятельности, и я хочу перемещаться по ним с помощью BottomNavigationView.Я хочу добавить их один раз, а затем просто переключаться между ними, не уничтожая фрагменты.Все работает нормально, за исключением того, что первый фрагмент, добавленный в SupportFragmentManager, всегда исчезает (пытался изменить порядок, чтобы проблема была не в самих фрагментах).На самом деле, он не исчезает, но обнаруживается последний фрагмент, который занял контейнер.Например.Я иду в позицию 3, фрагмент 3 появляется в контейнере, а затем нажимаю на позицию 1, фрагмент 3 по-прежнему будет занимать контейнер.Но если я коснусь позиции 2, появится фрагмент 2.Как я добавляю фрагменты:
FragmentTransaction ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.container, fragment1); //whatever gets added here ends up being invisible
ft.commitAllowingStateLoss();
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.container, fragment2);
ft.commitAllowingStateLoss();
ft = getSupportFragmentManager().beginTransaction();
ft.add(R.id.container, fragment3);
ft.commitAllowingStateLoss();
Как я переключаюсь между ними с помощью OnNavigationItemSelectedListener:
private BottomNavigationView.OnNavigationItemSelectedListener navigation_listener =
new BottomNavigationView.OnNavigationItemSelectedListener() {
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
Fragment selectedFragment = null;
Fragment previousFragment = getSupportFragmentManager().findFragmentById(R.id.container);
switch(item.getItemId()){
case R.id.bottom_navigation_bar_position1:
selectedFragment = fragment1;
break;
case R.id.bottom_navigation_bar_position2:
selectedFragment = fragment2;
break;
case R.id.bottom_navigation_bar_position3:
selectedFragment = fragment3;
break;
}
getSupportFragmentManager().beginTransaction().hide(previousFragment).commit();
getSupportFragmentManager().beginTransaction().show(selectedFragment).commit();
return true;
}
};
Навигация по меню XML:
<item
android:id="@+id/bottom_navigation_bar_position1"
android:title="Title1"
android:icon="@drawable/ic1"
/>
<item
android:id="@+id/bottom_navigation_bar_position2"
android:title="Title2"
android:icon="@drawable/ic2"
/>
<item
android:id="@+id/bottom_navigation_bar_position3"
android:title="Title3"
android:icon="@drawable/ic3"
/>
Кстати.просто использовать replace () вместо show and hide works, но это не цель ... Я также проверил, выходит ли первый добавленный фрагмент (и не уничтожается) и он действительно существует ... Спасибо!