java - 如何在抽屉布局(带有抽屉导航菜单)中使用Android导航组件(导航图)?

标签 java android android-fragments

我有一个导航图,它使用此 fragment 作为主 Activity XML 中的主页。

        <fragment
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        app:layout_behavior="@string/appbar_scrolling_view_behavior"
        class="androidx.navigation.fragment.NavHostFragment"
        app:navGraph="@navigation/main_nav_graph"
        app:defaultNavHost="true"/>

我有一个带有菜单的抽屉布局,当我单击抽屉导航按钮时,我无法使导航正常工作(它在主 fragment 中工作,但在我单击抽屉按钮时不起作用),如果我使用使用以下命令对抽屉导航进行编程的旧方法:getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new_fragment).commit(); ,我的导航 Controller 丢失了!我收到类似

的错误

destination fragment in unknown by navcontroller , because the controller will see the home fragment as currently displayed even if it is not the case (from debug)

public boolean onNavigationItemSelected(MenuItem item) {

        switch (item.getItemId()){
            case R.id.action_1:
                //doesn't work when it current fragment doesnt match the 
                //action_fromfragmentx_to_fragmenty
                Navigation.findNavController(this,R.id.fragment_container)
                .navigate(R.id.action_fromfragmentx_to_fragmenty);
                break;

            //Other menu options...
        }

因此我的问题是:我应该如何在 Java 中重写此 onNavigationItemSelected 以使导航组件正常工作?关于此主题的任何链接或相关文档(Java 语言)?.

最佳答案

导航组件在NavigationUI中提供了一个帮助器类。在 navigation-ui Artifact 中。根据Update UI components with Navigation documentation for navigation drawers ,您可以使用 setupWithNavController() 方法自动将菜单项连接到您在导航图中设置的导航目的地 tying the destination item to a menu item :

If the id of the MenuItem matches the id of the destination, the NavController can then navigate to that destination.

因此,您根本不需要 onNavigationItemSelected 实现,也不需要执行任何 FragmentTransactions。只需确保菜单 XML 中的 android:id="@+id/fragment_y" 与导航中的 android:id="@+id/fragment_y" 匹配即可XML 并调用 setupWithNavController():

NavigationView navView = findViewById(R.id.nav_view);
// This is what sets up its own onNavigationItemSelected
NavigationUI.setupWithNavController(navView, navController);

关于java - 如何在抽屉布局(带有抽屉导航菜单)中使用Android导航组件(导航图)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59997397/

相关文章:

java - 如果存在强引用,保证返回现有对象的线程安全对象池?

java - 从空变量访问静态变量

android - 使用系统应用程序或外部浏览器打开 Youtube 链接

android - 在 Fragments 中隐藏 EditText 的键盘

android - NotificationPreferenceFragment - 默认构造函数已弃用

java - 如何设置Oracle JDK支持FIPS模式

java - 为什么 SpringLDAP/普通 Java AD 查询中的 accountExpires 和 userAccountControl 过滤器不能按预期工作?

android - ERROR : error. NonExistentClass Kotlin 在多模块 Dagger 项目中

java - 使用 Retrofit 解析要映射的 JSON 标记名称和值

java - 将方向键焦点更改保持​​在当前 fragment 内