我正在将Navigation Android组件与导航抽屉一起使用,它可以很好地运行我们的代码:
private void setupNavMenu() {
NavHeaderMainBinding navHeaderMainBinding = DataBindingUtil.inflate(getLayoutInflater(),
R.layout.nav_header_main, mActivityMainBinding.navigationView, false);
mActivityMainBinding.navigationView.addHeaderView(navHeaderMainBinding.getRoot());
navHeaderMainBinding.setViewModel(mMainViewModel);
addNavigationItem();
NavigationUI.setupActionBarWithNavController(this, navController, mActivityMainBinding.drawerView);
mNavigationView.setNavigationItemSelectedListener(
item -> {
mDrawer.closeDrawer(GravityCompat.START);
return true;
});
NavigationUI.setupWithNavController(mNavigationView, navController);
}
这是我们的导航项:
private void addNavigationItem() {
final Menu menu = mNavigationView.getMenu();
menu.add(R.id.group, R.id.test1Fragment, Menu.NONE, "test1");
menu.add(R.id.group, R.id.test2Fragment Menu.NONE, "test2");
menu.add(R.id.group, R.id.testActivity3 Menu.NONE, "test3");
}
navigation_xml
<?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/home_fragment"
app:startDestination="@id/test1Fragment">
<fragment
android:id="@+id/test1Fragment"
android:name="com.test.Test1"
android:label="FragmentOne">
<action
android:id="@+id/action_test1"
app:destination="@id/test2Fragment" />
</fragment>
<fragment
android:id="@+id/test2Fragment"
android:name="com.test.Test2"
android:label="FragmentThree" >
<action
android:id="@+id/action_test2"
/>
</fragment>
<activity
android:id="@+id/testActivity3"
android:name="com.test.TestActivity"
android:label="Act"
tools:layout="@layout/activity_test"
></activity>
</navigation>
一切正常。现在的问题是,当我单击导航抽屉中的第二个标签并再次从第二个片段中打开抽屉并单击第三个选项卡Activity
时。然后在背面按堆栈无法正常工作,片段test1和test2相互重叠。我该如何解决此问题?我认为如果在导航图中添加Activity
,则Backstack无法正常工作。