Компонент навигации с нижней навигацией - PullRequest
2 голосов
/ 16 июня 2019

Я работаю с компонентом навигации и нижней навигацией

val navController = indNavController(R.id.nav_host_fragment)
bottom_navigation.inflateMenu(R.menu.bottom_navigation_menu)
bottom_navigation.setupWithNavController(navController)

и я сталкиваюсь со следующей проблемой:

Когда элемент выбран в нижней части навигации, загружается фрагмент. Проблема возникает, когда я снова нажимаю на тот же элемент, затем загружается новый фрагмент, что не имеет никакого смысла вообще.

Пример: 1 - Пользователь выбирает пункт меню A, затем загружается FragmentA. 2- Пользователь снова выбирает пункт меню A, затем будет загружен новый фрагмент A,

Я пытался использовать

bottom_navigation.setOnNavigationItemSelectedListener {  }

Но тогда нижняя навигация не будет работать с navController.

Итак, вопрос в том, есть ли способ справиться с этой ситуацией, чтобы снова загрузить новый фрагмент, когда пользователь уже находится на этом экране?

Ответы [ 2 ]

2 голосов
/ 17 июня 2019

Наконец-то я смог решить эту проблему.

Как я уже говорил, этот код:

bottom_navigation.setupWithNavController(navController)

использует

bottom_navigation.setOnNavigationItemSelectedListener {  }

поэтому каждый раз, когда я выбираю / повторно выбираю элемент, navController загружает новый фрагмент. Я проверил Javadoc для setOnNavigationItemSelectedListener, и он говорит:

  • Установите слушателя, который будет уведомлен, когда выбран нижний элемент навигации. Этот слушатель * также будет уведомлен, когда выбранный в данный момент элемент выбирается повторно, если только {@link * OnNavigationItemReselectedListener} также был установлен.

Итак, я добавил следующую строку в мой код:

bottom_navigation.setOnNavigationItemReselectedListener { }

и все. NavController будет загружать фрагмент при выборе элемента, но не при повторном выборе элемента в нижней части навигации.

0 голосов
/ 16 июня 2019

Попробуйте, чтобы игнорировать щелчок пользователя на том же выбранном элементе:

bottom_navigation.apply {
        setOnNavigationItemSelectedListener {
            if (it.itemId == bottom_navigation.selectedItemId) {
                true
            } else when (it.itemId) { ... }
...