首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NavigationView点击事件

NavigationView点击事件
EN

Stack Overflow用户
提问于 2019-08-24 22:50:57
回答 1查看 2.1K关注 0票数 3

我正在使用android Studio模板中的Android导航抽屉导航菜单。如何根据id导航到不同的活动。

代码语言:javascript
复制
DrawerLayout drawer = findViewById(R.id.drawer_layout);
        NavigationView navigationView = 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 = new AppBarConfiguration.Builder(
                R.id.nav_home, R.id.nav_gallery, R.id.nav_slideshow,
                R.id.nav_tools, R.id.nav_share, R.id.nav_send)
                .setDrawerLayout(drawer)
                .build();
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
        NavigationUI.setupWithNavController(navigationView, navController);


  @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        // Inflate the menu; this adds items to the action bar if it is present.
        getMenuInflater().inflate(R.menu.admin_panel_navigation, menu);
        return true;
    }

    @Override
    public boolean onSupportNavigateUp() {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.navigateUp(navController, mAppBarConfiguration)
                || super.onSupportNavigateUp();
    }

    @Override
    public boolean onOptionsItemSelected(MenuItem item) {
        NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
        return NavigationUI.onNavDestinationSelected(item, navController)
                || super.onOptionsItemSelected(item);
    }

我尝试了下面这组代码,但它不执行单击操作。

代码语言:javascript
复制
@Override
public boolean onNavigationItemSelected(@NonNull MenuItem item) {
    // Handle navigation view item clicks here.
    switch (item.getItemId()) {

       case R.id.nav_maths: {
      //do somthing
            break;
        }  
    }
    //close navigation drawer
    mDrawerLayout.closeDrawer(GravityCompat.START);
    return true;
}

我知道我漏掉了一些东西,但我找不到解决方案。有谁能帮帮我。

EN

回答 1

Stack Overflow用户

发布于 2019-08-25 07:05:00

根据Tie destinations to menu items section,导航使用您添加到菜单xml中的in,将它们与导航图xml文件中的目的地进行匹配。

所以如果你有一个菜单项,比如

代码语言:javascript
复制
<item
    android:id="@+id/nav_maths"
    android:icon="@drawable/maths"
    android:title="@string/maths" />

并希望它启动一个不同的活动,您可以将<activity>目的地添加到导航图中:

代码语言:javascript
复制
<activity
    android:id="@+id/nav_maths"
    android:name="com.your.package.MathsActivity" />

因为它们具有相同的ID,所以当您单击菜单中的该项时,您的活动将启动。

请注意,导航侧重于只有一个活动,因此活动目的地应该被视为图形的出口点-第二个活动将有其自己的导航图,等等,这与第一个活动完全分开。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57639024

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档