ответ

5

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

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

Вот gist to the code

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

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

Дождитесь, пока ASL-разработчики fix this.

+0

Почему бы не указать нужный элемент, как указано? как они предлагают в последней опубликованной вами ссылке (https://code.google.com/p/android/issues/detail?id = 225900 & q = BottomNavigationView & colspec = ID% 20Status% 20Priority% 20Owner% 20Summary% 20Stars% 20Reporter% 20Opened) bottomNavigationView.getMenu(). findItem (selectedItem) .setChecked (true); –

1

Согласен с Nikola!

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

Чтобы сохранить состояние после поворота вам нужно добавить к вам 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); 

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

+1

Если позиция считается интересом к представлению, она должна быть сохранена внутри реализации представления. Поэтому обычной практикой является сохранение в соответствующих режимах сохранения и восстановления представления, чем переход в класс «Активность». –

2

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

Сохранение значение идентификатора, взяв выбранный идентификатор меню в переменной

@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 метод получения значения удостоверения личности, если таковая имеется

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

У меня была та же проблема, и что я сделал, чтобы обновить из 2 5.0.1 - 25.3.1 и он начал работать правильно, без дополнительного кода. Вы можете проверить Support Library Revision website на последнюю версию.

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

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