我一直在进行底部导航,并试图从Android Studio默认创建的底部导航活动模板中复制MainActivity.java的代码。我也从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_dashboard
,navigation_notifications
,AppBarConfiguration.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>
我有相同的错误,我通过创建我的[[Own Toolbar然后将其设置为Support Action Bar来解决它,如下所示。
最初,使用findviewbyid
或使用databinding获取toolbar,并将其分配给变量。这里我将其设置为变量工具栏,然后进一步使用它。setSupportActionBar(toolbar)
然后我们必须按如下所示将其添加到appbarconfiguraion
中。toolbar.setupWithNavController(navController,appBarConfiguration)
此错误
可能是由于工具栏和导航视图之间的未建立的连接而发生的。希望这会有所帮助。