#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);
После этого имейте в виду, что вы должны управлять выбранными элементами вручную, поскольку навигация больше не будет делать это за вас.