Navigation view items will not respond when pressed
Элементы вида навигации не реагируют при нажатии
Я работаю над приложением с боковым ящиком навигации. Ящик открывается нормально, однако текст, который предположительно может быть "интерактивным", похоже, не реагирует. Анимация показывает, что при нажатии на ящик есть обратная связь (вы можете услышать звук), однако это ничего не дает. Я пытался размещать всплывающие сообщения, чтобы увидеть, регистрирует ли кнопка действие, но при нажатии всплывающее окно не появляется. Код выглядит следующим образом (я реализовал NavigationView.OnNavigationItemSelectedListener):
DrawerLayoutdrawer= findViewById(R.id.drawer_layout); NavigationViewnavigationView= findViewById(R.id.nav_view); navigationView.setNavigationItemSelectedListener(this); // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. mAppBarConfiguration = newAppBarConfiguration.Builder( R.id.nav_home, R.id.nav_history, R.id.nav_settings, R.id.nav_help, R.id.nav_signout) .setDrawerLayout(drawer) .build(); NavControllernavController= Navigation.findNavController(this, R.id.nav_host_fragment); NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); NavigationUI.setupWithNavController(navigationView, navController);
А затем я реализовал метод:
@Override publicbooleanonNavigationItemSelected(@NonNull MenuItem menuItem) { switch (menuItem.getItemId()){ case R.id.nav_history: Toast.makeText(this, "fsdfuxc", Toast.LENGTH_LONG).show(); break; case R.id.nav_help:
Вызывает setNavigationItemSelectedListener внутренний вызов для подключения пунктов назначения к пунктам меню (т. Е., Когда вы нажимаете на R.id.nav_settings MenuItem , он заменяет фрагмент в вашем NavHostFragment на фрагмент с android:id="@+id/nav_settings" set). Этот прослушиватель переопределяет OnNavigationItemSelectedListener установленное вами представление, вот почему ваша пользовательская логика не запускается.
Если вы хотите объединить оба набора функций вместе, вам нужно вызвать navigationView.setNavigationItemSelectedListener(this);aftersetupWithNavController и запустить поведение по умолчанию с помощью NavigationUI.onNavDestinationSelected():
DrawerLayoutdrawer= findViewById(R.id.drawer_layout); NavigationViewnavigationView= findViewById(R.id.nav_view); // Passing each menu ID as a set of Ids because each // menu should be considered as top level destinations. mAppBarConfiguration = newAppBarConfiguration.Builder( R.id.nav_home, R.id.nav_history, R.id.nav_settings, R.id.nav_help, R.id.nav_signout) .setDrawerLayout(drawer) .build(); NavControllernavController= Navigation.findNavController(this, R.id.nav_host_fragment); NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration); NavigationUI.setupWithNavController(navigationView, navController); // This line needs to be after setupWithNavController() navigationView.setNavigationItemSelectedListener(this);
}
@Override publicbooleanonNavigationItemSelected(@NonNull MenuItem menuItem) { NavControllernavController= Navigation.findNavController(this, R.id.nav_host_fragment); switch (menuItem.getItemId()){ case R.id.nav_history: Toast.makeText(this, "fsdfuxc", Toast.LENGTH_LONG).show(); break; case R.id.nav_signout: signOut(); break; default: // Trigger the default action of replacing the current // screen with the one matching the MenuItem's ID NavigationUI.onNavDestinationSelected(menuItem, navController); }