主要活動
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();
}
}
nav_graph.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 中的“向上”箭頭時,它確實將我帶回讀數。似乎通過 DrawerLayout 訪問 AboutFragment 與從 FAB 訪問 AboutFragment 的行為不同。
uj5u.com熱心網友回復:
你可以嘗試:
override fun onSupportNavigateUp(): Boolean {
val navController = this.findNavController(R.id.mainNavHostFragment)
return when(navController.currentDestination?.id) {
R.id.about-> {
popBackStack()
true
}
else -> navController.navigateUp()
}
}
請讓我知道這對你有沒有用
uj5u.com熱心網友回復:
在這里為遇到此問題的其他人回答我自己的問題。解決方案是android:menuCategory="secondary"在 DrawerLayout 選單檔案中放入 AboutFragment 項。
menu_drawer.xml
<item
android:id="@ id/nav_about"
android:menuCategory="secondary"
android:icon="@drawable/vic_about"
android:title="@string/general_about" />
這樣做的原因是:
默認情況下,回傳堆疊將彈出回導航圖的起始目的地。具有 android:menuCategory="secondary" 的選單項不會彈出回堆疊。
我在這篇文章https://stackoverflow.com/a/60516769/728002中找到了解決方案
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/444719.html
