Удаление значка из BottomNavigationView при использовании навигационного компонента

#android #kotlin #android-navigation #badge #android-bottomnavigationview

#Android #котлин #android-навигация #значок #android-bottomnavigationview #kotlin

Вопрос:

Я использую компонент material design BottomNavigationView и переход фрагмента с использованием навигационных компонентов.

Проблема, с которой я сталкиваюсь в настоящее время, заключается в том, что я не могу удалить / скрыть значки. Когда мы используем navigationComponent, я не могу использовать, setOnNavigationItemSelectedListener вместо этого мы используем setupWithNavController , поэтому, когда я нажимаю на ItemId, как я могу узнать, на каком фрагменте / ItemId я сейчас нахожусь, и удалить значок для этого конкретного ItemId

Ответ №1:

Используя пользовательский NavigationItemSelectedListener , вы удаляете исходный прослушиватель. Однако вы можете запустить поведение по умолчанию с помощью NavigationUI.onNavDestinationSelected(it, navController) .

 bottomNavigationView.setOnNavigationItemSelectedListener {
            when (it.itemId) {
                R.id.nav_xxxx -> {
                    // handle click
                    // .....
                }
            }
            NavigationUI.onNavDestinationSelected(it, navController)
            true
        }
  

Ответ №2:

Создайте XML-селектор, чтобы изменить значок выбранного пункта меню. Допустим, это называется bottom_item_selector :

 <?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/unchecked_item_drawable" android:state_checked="false"/>
    <item android:drawable="@drawable/checked_item_drawable" android:state_checked="true"/>
</selector>
  

Затем в вашем меню XML измените значок, чтобы использовать этот чертеж:

     <item
        android:id="@ id/.."
        android:icon="@drawable/bottom_item_selector"
        android:checkable="true"
        android:title=""/>
  

Таким образом, вам не нужно добавлять слушателя и вызывать NavigationUI явно.