onNavigationItemSelected не работает с навигационным ящиком

#android #events #navigation-drawer

#Android #Мероприятия #навигация-ящик

Вопрос:

Я пытаюсь получить событие щелчка элемента навигационного ящика. То, что я сделал, как показано ниже.

(1) Создайте новый исходный проект Android, выбрав «Активность навигационного ящика» в «Выберите шаблон проекта». (Минимальный SDK: API 22 — Lollipop)

(2) Добавьте один элемент в ‘/res/menu/activity_main_drawer.xml «.

 <group android:checkableBehavior="single">
    <item
        android:id="@ id/nav_home"
        android:icon="@drawable/ic_menu_camera"
        android:title="@string/menu_home" />
    <item
        android:id="@ id/nav_gallery"
        android:icon="@drawable/ic_menu_gallery"
        android:title="@string/menu_gallery" />
    <item
        android:id="@ id/nav_slideshow"
        android:icon="@drawable/ic_menu_slideshow"
        android:title="@string/menu_slideshow" />
</group>

<item
    android:id="@ id/menu_notification"
    android:icon="@drawable/ic_menu_slideshow"
    android:title="Notification" />
  

(3) MainActivity реализует NavigationItemSelectedListener и определяет функцию события — onNavigationItemSelected()

открытый класс MainActivity расширяет AppCompatActivity, реализует NavigationView.OnNavigationItemSelectedListener {

 @SuppressWarnings("StatementWithEmptyBody")
@Override
public boolean onNavigationItemSelected(MenuItem item) {
    int id = item.getItemId();
    if (id == R.id.menu_notification) {
        Toast.makeText(this, "Menu - Notification", Toast.LENGTH_SHORT).show();
    }
    return true;
}
  

(4) Установите NavigationItemSelectedListener в MainActivity в методе onCreate().

 protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    Toolbar toolbar = findViewById(R.id.toolbar);
    setSupportActionBar(toolbar);
    FloatingActionButton fab = findViewById(R.id.fab);
    fab.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
                    .setAction("Action", null).show();
        }
    });
    DrawerLayout drawer = findViewById(R.id.drawer_layout);
    NavigationView navigationView = findViewById(R.id.nav_view);
    navigationView.bringToFront();
    navigationView.setNavigationItemSelectedListener(this);
    mAppBarConfiguration = new AppBarConfiguration.Builder(
            R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow)
            .setDrawerLayout(drawer)
            .build();
    NavController navController = Navigation.findNavController(this,
        R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
    NavigationUI.setupWithNavController(navigationView, navController);
}
  

Это все, что я сделал. После запуска этого приложения на эмуляторе я нажал новый пункт меню (уведомление), но ничего не произошло.
onNavigationItemSelected() не может получить событие щелчка элемента.

Что мне нужно сделать, чтобы получить событие щелчка элемента навигационного ящика?

Ответ №1:

Причина, по которой это не работает, заключается в том, что вы используете компонент навигации. Если вы хотите onNavigationItemSelected , чтобы вызывался метод, удалите указанную строку ниже:

     NavigationUI.setupWithNavController(navigationView, navController);
  

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