Использование ASL 25.0 BottomNavigationView
Я столкнулся с некоторыми проблемами, такими как сохранение выбранного элемента (или его индекса) и выбранного элемента программно.Сохранить снизуНавигацияПредующий выбранный элемент во время поворота экрана
ответ
К сожалению, на этом этапе отсутствуют plenty функций, отсутствующих в BottomNavigationView
.
Ваш вопрос был действительно интересным, и я написал этот расширенный BottomNavigationView
, который сохраняет состояние и в вашем случае сохраняет последний выбранный элемент.
Вот gist to the code
Это расширение включает в себя:
- дает общественности два метода, чтобы установить и получить выбранные элементы программно.
- Сохраняет и восстанавливает состояние только для последнего выбора.
Дождитесь, пока ASL-разработчики fix this.
Согласен с 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);
Самым большим плюсом этого суждения является: Есть несколько видов слушателей, это показывает вам предыдущий выбор ион и слушатели реагируют, даже если положение задано программно. Все написано в ссылке, используйте, если нужно.
Если позиция считается интересом к представлению, она должна быть сохранена внутри реализации представления. Поэтому обычной практикой является сохранение в соответствующих режимах сохранения и восстановления представления, чем переход в класс «Активность». –
Я работаю с 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();
}
У меня была та же проблема, и что я сделал, чтобы обновить из 2 5.0.1 - 25.3.1 и он начал работать правильно, без дополнительного кода. Вы можете проверить Support Library Revision website на последнюю версию.
Надеюсь, это поможет.
Почему бы не указать нужный элемент, как указано? как они предлагают в последней опубликованной вами ссылке (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); –