Я использую компонент 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 перекрывают друг друга. Как я мог решить эту проблему?я думаю, что backstack не работает нормально, если я добавлю Activity
в граф навигации.