【问题标题】:NavigationView click eventNavigationView 点击事件
【发布时间】:2019-12-29 12:43:50
【问题描述】:

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

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);
    }

我尝试了下面的一组代码,但它没有执行点击操作。

@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;
}

我知道我遗漏了一些东西,但我无法找到解决方案。谁能帮帮我。

【问题讨论】:

    标签: java android android-layout


    【解决方案1】:

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

    因此,如果您有一个菜单项,例如

    <item
        android:id="@+id/nav_maths"
        android:icon="@drawable/maths"
        android:title="@string/maths" />
    

    并希望它启动不同的活动,您可以在导航图中添加一个&lt;activity&gt; 目的地:

    <activity
        android:id="@+id/nav_maths"
        android:name="com.your.package.MathsActivity" />
    

    而且由于它们具有相同的 ID,因此当您在菜单中单击该项目时,您的活动就会开始。

    请注意,导航专注于只有一个活动,因此应将活动目的地视为图表的退出点 - 您的第二个活动将有自己的导航图等,与第一个完全分开。

    【讨论】:

    • 我正在使用片段。由于第一个片段已加载,而其他片段未加载。
    • 我不确定您的意思,也不确定这与单击 NavigationView 中的菜单项时启动活动有何关系?
    • 这只是我在Android studio中使用的模板,它适用于第一个Item。每当我点击另一个项目时,它都不会打开片段。
    • 同样的事情也适用于&lt;fragment&gt; 目的地 - 您的菜单 xml 中的 id 是否与导航图 xml 文件中的&lt;fragment&gt; 目的地的 id 匹配?如果您遇到与此问题不同的问题(关于单击菜单项时启动活动),也许您应该将其作为一个单独的问题提出?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-17
    • 2023-03-27
    • 1970-01-01
    • 2012-12-07
    • 2012-09-07
    • 1970-01-01
    相关资源
    最近更新 更多