Как правильно отметить элемент как выбранный в NavigationDrawer? - PullRequest
0 голосов
/ 06 мая 2020

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

Мне удалось пометить элемент после его выбора и до тех пор, пока видимый фрагмент не изменится (даже если новый фрагмент все еще находится в том же navGraph ). Я сделал это, установив NavigationItemSelectedListener, используя NavigationView.setNavigationItemSelectedListener(NavigationView.OnNavigationItemSelectedListener listener). Внутри этой функции слушателей onNavigationItemSelected(item: MenuItem): Boolean я делаю: item.isChecked = true.

Проблема в том, что элемент не отмечен после запуска приложения, и элемент теряет свое отмеченное состояние, как только фрагмент изменяется (даже если navGraph не меняется). Как мне это сделать правильно?

Я также пытался установить android:checked="true" в объявлении xml пункта меню, который я хочу проверять при запуске приложения. Кажется, это ничего не делает.
Я также пытался установить navView.setCheckedItem(R.id.main_nav_option_one) в функции onCreate Activity. Опять же, похоже, ничего не происходит.

Ответы [ 2 ]

0 голосов
/ 07 мая 2020

Мне удалось решить мою проблему.

Самое важное изменение, которое мне пришлось сделать, упомянуто здесь . Я должен был дать своим пунктам меню тот же идентификатор, что и идентификатор navGraphs. Когда я это сделал, я удалил свой NavigationItemSelectedListener, потому что он мешал автоматически сгенерированной навигации. Без NavigationItemSelectedListener я больше не мог бы обрабатывать щелчок по элементу навигации, у которого нет соответствующего элемента в navGraph. Однако я смог исправить это, добавив NavigationItemSelectedListener обратно и сделав правильные вызовы NavController.navigate() для каждого элемента в списке.

TL; DR:
Мне пришлось установить идентификаторы пунктов меню должны быть такими же, как мои идентификаторы navGraph, и все равно делать навигационные вызовы самостоятельно в NavigationItemSelectedListener.

0 голосов
/ 06 мая 2020

Можете ли вы попробовать

        navView.getMenu().getItem(index).setChecked(true)

во фрагменте onResume?

...