Это, вероятно, будет добавлено в ближайшие обновления. Но тем временем, чтобы достичь этого, вы можете использовать отражение.
Создайте пользовательский вид, простирающийся от BottomNavigationView и получив доступ к некоторым его полям.
public class SelectableBottomNavigationView extends BottomNavigationView {
public SelectableBottomNavigationView(Context context) {
super(context);
}
public SelectableBottomNavigationView(Context context, AttributeSet attrs) {
super(context, attrs);
}
public SelectableBottomNavigationView(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
public void setSelected(int index) {
try {
Field f = BottomNavigationView.class.getDeclaredField("mMenuView");
f.setAccessible(true);
BottomNavigationMenuView menuView = (BottomNavigationMenuView) f.get(this);
try {
Method method = menuView.getClass().getDeclaredMethod("activateNewButton", Integer.TYPE);
method.setAccessible(true);
method.invoke(menuView, index);
} catch (SecurityException | NoSuchMethodException | IllegalAccessException | InvocationTargetException e) {
e.printStackTrace();
}
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (NoSuchFieldException e) {
e.printStackTrace();
}
}
}
И затем используйте его в своем файле макета xml.
<com.your.app.SelectableBottomNavigationView
android:id="@+id/bottom_navigation"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:itemBackground="@color/primary"
app:itemIconTint="@drawable/nav_item_color_state"
app:itemTextColor="@drawable/nav_item_color_state"
app:menu="@menu/bottom_navigation_menu"/>
Я только что посмотрел на источник, и у меня есть тот же вопрос .. Не похоже, что есть способ установить выделенный элемент, а 'BottomNavigationView' не выполняет никакой внутренней экономии состояния , Вероятно, ожидается, что это будет включено в будущее обновление. Дубликат (с дополнительной информацией) здесь: http://stackoverflow.com/questions/40236786/set-initially-selected-item-index-id-in-bottomnavigationview –