【问题标题】:navigation component with navigation view android带有导航视图android的导航组件
【发布时间】:2020-08-14 11:27:25
【问题描述】:

我正在尝试使用导航组件。
目前我有带菜单的导航视图。
我在导航视图中实现onNavigationItemSelected 并检测点击 item.getItemId() 当点击特定项目时,它会做一些不导航到片段的事情。例如:

 switch (item.getItemId()) {
        case R.id.nav_share:
            Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
            sharingIntent.setType("text/plain");
            String shareBody = "shae StayTuned with friends bla bla bla and we can put app url in the google play " +
                    "if we don't will be sdk";
            sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, shareBody);
            startActivity(Intent.createChooser(sharingIntent, "Share via"));
            break;
        case R.id.nav_disconnect_user:
            FirebaseAuth.getInstance().signOut();
            break;
    }

如何通过导航组件实现这一点? 谢谢!

【问题讨论】:

    标签: java android android-architecture-navigation android-navigationview android-jetpack-navigation


    【解决方案1】:

    使用导航组件,您无需手动实现OnNavigationItemSelectedListener,因为setupWithNavController() 方法将目的地连接到与导航图和菜单项之间的android:id 匹配的菜单项。

    如果您使用自定义 NavigationItemSelectedListener,您将删除原始侦听器。在这种情况下,您必须调用 NavigationUI.onNavDestinationSelected() 来触发默认行为。

    navigationView.setNavigationItemSelectedListener {
            when (it.itemId) {
                R.id.R.id.nav_share -> {
                    // handle click
                    true
                }
             }
             //Call the original listener
             NavigationUI.onNavDestinationSelected(it, navController)
             drawerLayout.closeDrawer(GravityCompat.START)
             true
        }
    

    【讨论】:

    • 这些项目在导航图中不存在,因为它不是片段。那么菜单项和导航图项之间的匹配是如何发生的呢?还是我可以在导航图中声明不只是片段?
    • @YaffaHarari 只需在您的setNavigationItemSelectedListener 中指定不 与导航图匹配的项目。而对于其他人,只需使用默认的NavigationUI.onNavDestinationSelected(it, navController)
    • 好的。我理解你。实现原始 setNavigationItemSelectedListener 并从 onCreate 中删除 NavigationUI.setupWithNavController(binding.navView, navController); 并将其放在每个项目的末尾 onNavigationItemSelected 方法的末尾以供其他项目点击。这是工作。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-11-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多