Добавьте навигационные пункты назначения верхнего уровня во время выполнения - PullRequest
0 голосов
/ 17 апреля 2020

Я знаю, как создать несколько пунктов назначения верхнего уровня для графика навигации. После ответов здесь в порядке.

Однако я хочу добавить, в зависимости от желания пользователя приложения (например, нажатие кнопки), еще один пункт назначения верхнего уровня.

В соответствие документации :

//Redoing the navigation setup
int[] itemsId = new int[ menu.size() ];
for( int i = 0; i < menu.size(); i++ ) {
    itemsId[i] = menu.getItem(i).getItemId();        
}
mAppBarConfiguration = new AppBarConfiguration.Builder( itemsId )
    .setDrawerLayout(drawer)
    .build();
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);

Этот фрагмент кода уже был в onCreate () файла MainActivity. java. Затем, после добавления элемента меню, я снова запускаю код.

После навигации вновь добавленный элемент меню по-прежнему показывает кнопку «Назад» в левом верхнем углу вместо кнопки стека гамбургера.

То, что я хочу, даже возможно? Любые идеи?

PS: я использую шаблон проекта basi c "Активность в окне навигации" Android (когда вы хотите начать новый проект).

1 Ответ

0 голосов
/ 17 апреля 2020

На самом деле это работает, пока идентификатор пункта меню совпадает с идентификатором фрагмента в элементе mobile_navigation. (Можно иметь фрагмент, который не назначен элементу меню, а затем добавить элемент меню). Моя ошибка заключалась в том, что я динамически добавлял пункт меню, например:

int idOfNewMenuItem = View.generateViewId();
final MenuItem createdMenuItem = menu.add( R.id.main_drawer_group, idOfNewMenuItem, 0, userInputText);

, затем переходил к фрагменту с собственным идентификатором

navController.navigate( R.id.nav_activefragment );

Итак, что нужно было сделать было

final MenuItem createdMenuItem = menu.add( R.id.main_drawer_group, R.id.nav_activefragment, 0, userInputText);
navController.navigate( R.id.nav_activefragment );

Затем я должен снова вставить код в вопросе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...