底部导航:NavigationUI.setupActionBarWithNavController()不适用于片段交换

问题描述 投票:1回答:1

我一直在进行底部导航,并试图从Android Studio默认创建的底部导航活动模板中复制MainActivity.java的代码。Choosing template我也从Android Studio找到了这个UI的文档。Bottom Navigation基本上,MainActivity中的主要代码应类似于调用导航交互的代码:

    AppBarConfiguration appBarConfiguration = new AppBarConfiguration.Builder(
            R.id.navigation_home, R.id.navigation_dashboard, R.id.navigation_notifications)
            .build();
    NavController navController = Navigation.findNavController(this, R.id.nav_host_fragment);
    NavigationUI.setupActionBarWithNavController(this, navController, appBarConfiguration);
    NavigationUI.setupWithNavController(navView, navController);

我的底部导航xml很完美。但是我只是发现NavigationUI.setupActionBarWithNavController()NavigationUI.setupWithNavController()不起作用。每当我运行我的应用程序时,它就闪烁并停止。 Kinda很奇怪,但是我相信这两种方法是底部导航的官方用法。


编辑:经过如此多的实验和测试,我发现navigation_home中的参数navigation_dashboardnavigation_notificationsAppBarConfiguration.Builder()被声明了两次。一个在@@ menu / bottom_nav_menu.xml中一个在@@ navigation / mobile_navigation.xml中。我不知道为什么没有冲突,但是即使我将其ID更改为与应用程序仍在停止...相同。现在,我使用一种传统方式(单击侦听器)来实现导航的交互。

  bottomNavigationView.setOnNavigationItemSelectedListener(new BottomNavigationView.OnNavigationItemSelectedListener() {
       @Override
       public boolean onNavigationItemSelected(@NonNull MenuItem item) {
           navController= Navigation.findNavController(HomeActivity.this, R.id.frag_container);
            switch (item.getItemId()) {
               case R.id.bottom_navi_intake:
                   navController.navigate(R.id.action_WeightFragment_to_IntakeFragment);
                   break;
               case R.id.bottom_navi_weight:
                   navController.navigate(R.id.action_IntakeFragment_to_WeightFragment);
                   break;
           }
           return true;
       }
   });

R.id.action _...是@ navigation / nav.graph.xml中的操作ID:

<?xml version="1.0" encoding="utf-8"?>
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/nav_graph"
app:startDestination="@id/bottom_navi_intake">

<fragment
    android:id="@+id/bottom_navi_intake"
    android:name="com.example.dietdiary.IntakeFragment"
    android:label="@string/first_fragment_label"
    tools:layout="@layout/fragment_intake">

    <action
        android:id="@+id/action_IntakeFragment_to_WeightFragment"
        app:destination="@id/bottom_navi_weight" />
</fragment>
<fragment
    android:id="@+id/bottom_navi_weight"
    android:name="com.example.dietdiary.WeightFragment"
    android:label="@string/second_fragment_label"
    tools:layout="@layout/fragment_weight">

    <action
        android:id="@+id/action_WeightFragment_to_IntakeFragment"
        app:destination="@id/bottom_navi_intake" />
</fragment>

android navigation androidx
1个回答
0
投票

我有相同的错误,我通过创建我的[[Own Toolbar然后将其设置为Support Action Bar来解决它,如下所示。

最初,使用

findviewbyid

或使用databinding获取toolbar,并将其分配给变量。这里我将其设置为变量工具栏,然后进一步使用它。

setSupportActionBar(toolbar)

然后我们必须按如下所示将其添加到

appbarconfiguraion

中。

toolbar.setupWithNavController(navController,appBarConfiguration)

错误

可能是由于工具栏导航视图之间的未建立的连接而发生的。希望这会有所帮助。
© www.soinside.com 2019 - 2024. All rights reserved.