Сохранить выбранный элемент BottomNavigationView во время вращения экрана

использование ASL 25.0 BottomNavigationView Я столкнулся с некоторыми проблемами, такими как сохранение выбранного элемента (или его индекса) и выбранного элемента программно.

4 ответов


к сожалению, есть много функций, отсутствующих в BottomNavigationView на данном этапе.

Ваш вопрос был действительно интересным, и я написал эту расширенную BottomNavigationView это сохраняет состояние и, в вашем случае, сохраняет последний выбранный элемент.

здесь суть кода

Это расширение включает в себя:

  • дает public два метода для установки и получения выбранных элементов программно.
  • сохраняет и восстанавливает состояние только для последней выборки.

давайте подождем, пока ASL devs исправить.


Я работаю с BottomNavigationView и вот код, с которым приложение работает правильно при вращении экрана. Во-первых, я создал переменную для хранения идентификатора выбранного меню
private int saveState;

Сохранение значения id с помощью выбранного id меню в переменной

    @Override
    protected void onResume() {
        super.onResume();
        navigation.setSelectedItemId(saveState);
    }

    @Override
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
        super.onSaveInstanceState(outState, outPersistentState);
        saveState = navigation.getSelectedItemId();
    }

затем в методе onCreate извлекает значение id, если доступно

        if(savedInstanceState!=null){
            navigation.setSelectedItemId(saveState);
        }else{
            FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
            transaction.replace(R.id.content, MapFragment.newInstance());
            transaction.commit();
        }

согласен с Николой!

Я создал свой собственный суть слишком

чтобы сохранить состояние после вращения, вам нужно добавить к вам Activity:

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putInt("opened_fragment", bottomNavigation.getCurrentItem());
    super.onSaveInstanceState(outState);
}

и onCreate метод, сразу после настройки BottomNavigationView:

final defaultPosition = 0;
final int bottomNavigationPosition = savedInstanceState == null ? defaultPosition :
            savedInstanceState.getInt("opened_fragment", defaultPosition);

bottomNavigation.setCurrentItem(bottomNavigationPosition);

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


У меня была такая же проблема и что я сделал обновление от 25.0.1 to 25.3.1 и он начал работать правильно без необходимости дополнительного кода. Вы можете проверить поддержка библиотеки пересмотра веб-сайта для последней версии.

надеюсь, это поможет.