Сохранить выбранный элемент 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 и он начал работать правильно без необходимости дополнительного кода. Вы можете проверить поддержка библиотеки пересмотра веб-сайта для последней версии.
надеюсь, это поможет.