Для тих, хто все ще використовує SupportLibrary <25.3.0
Я не впевнений, чи є повною відповіддю на це питання, але моя проблема була дуже схожа - мені довелося обробити back
натискання кнопок і привести користувача до попередньої вкладки, де він був. Тож, можливо, моє рішення буде комусь корисним:
private void updateNavigationBarState(int actionId){
Menu menu = bottomNavigationView.getMenu();
for (int i = 0, size = menu.size(); i < size; i++) {
MenuItem item = menu.getItem(i);
item.setChecked(item.getItemId() == actionId);
}
}
Будь ласка, майте на увазі, що якщо користувач натисне іншу вкладку навігації BottomNavigationView
, не очистить поточно вибраний елемент, тож вам потрібно зателефонувати цей метод onNavigationItemSelected
після обробки дії навігації:
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
switch (item.getItemId()) {
case R.id.some_id_1:
// process action
break;
case R.id.some_id_2:
// process action
break;
...
default:
return false;
}
updateNavigationBarState(item.getItemId());
return true;
}
Щодо збереження стану екземпляра, я думаю, ви могли б пограти з таким самим action id
виглядом навігації і знайти відповідне рішення.
BottomNavigationView
не робить внутрішнього збереження стану. Можливо, очікуємо, що це буде включено у майбутнє оновлення. Дублікат (з великою кількістю деякою інформацією) тут: stackoverflow.com/questions/40236786 / ...