我遇到了这样的问题:当我从一个片段向后导航时,它不会将我带回到我的BottomNavigation中先前选择的片段。
我有一个同时包含DrawerLayout和BottomNavigation的MainActivity。BottomNavigation中有3个项目,对应于3个片段(Home、Readings、Graph)。所有3个都是应用中的顶级目的地(所有3个都有汉堡菜单图标)。DrawerLayout中有1个项目,用于打开我的AboutFragment。
在底部导航的阅读页面中,我打开抽屉布局并单击“关于”,这将打开AboutFragment。然后,当我单击AboutFragment中的“向上”箭头时,它并没有将我带回阅读页面,而是将我带回主页(底部导航的第一项)。我如何才能使它返回阅读页面,这是我之前所在的页面?
主要活动
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mBinding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(mBinding.getRoot());
setSupportActionBar(mBinding.appBarMain.mainToolbar);
mBottomNav = mBinding.appBarMain.mainBottomBar;
mDrawerLayout = mBinding.drawerLayout;
NavigationView navigationView = mBinding.navView;
mAppBarConfiguration = new AppBarConfiguration.Builder(
R.id.home, R.id.readings, R.id.graph)
.setOpenableLayout(mDrawerLayout)
.build();
NavController navController = Navigation.findNavController(this, R.id.main_fragments_container);
NavigationUI.setupActionBarWithNavController(this, navController, mAppBarConfiguration);
NavigationUI.setupWithNavController(navigationView, navController);
NavigationUI.setupWithNavController(mBottomNav, navController);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
NavController navController = Navigation.findNavController(this, R.id.main_fragments_container);
return NavigationUI.onNavDestinationSelected(item, navController)
|| super.onOptionsItemSelected(item);
}
@Override
public boolean onSupportNavigateUp() {
NavController navController = Navigation.findNavController(this, R.id.main_fragments_container);
return NavigationUI.navigateUp(navController, mAppBarConfiguration) || super.onSupportNavigateUp();
}
}
导航图形.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/nav_graph"
app:startDestination="@+id/home">
<fragment
android:id="@+id/home"
android:name="com.myapp.ui.tabs.HomeFragment"
android:label="@string/menu_title_home"
tools:layout="@layout/fragment_home" />
<fragment
android:id="@+id/readings"
android:name="com.myapp.ui.tabs.ReadingsFragment"
android:label="@string/menu_title_readings"
tools:layout="@layout/fragment_readings" />
<fragment
android:id="@+id/graph"
android:name="com.myapp.ui.tabs.GraphFragment"
android:label="@string/menu_title_graph"
tools:layout="@layout/fragment_graph" />
<fragment
android:id="@+id/about"
android:name="com.myapp.ui.about.AboutFragment"
android:label="@string/general_about"
tools:layout="@layout/fragment_about" />
</navigation>
注意作为测试,如果我让FAB按钮(在所有BottomNavigation片段屏幕上都可见)转到AboutFragment,那么当我单击AboutFragment中的“向上”箭头时,它确实会将我带回Readings。通过DrawerLayout访问AboutFragment的行为似乎与从FAB访问AboutFragment的行为不同。
2条答案
按热度按时间gywdnpxw1#
您是否可以尝试:
让我知道它是否适合你
cgh8pdjw2#
在这里为其他有这个问题的人回答我自己的问题。解决方案是将
android:menuCategory="secondary"
放在DrawerLayout菜单文件的AboutFragment项中。菜单_抽屉.xml
原因是:
我在这篇文章中找到了解决方案https://stackoverflow.com/a/60516769/728002