我想在主片段上有一個靜態工具列,在其他片段中有不同的選單選項的特定工具列。
這是主螢屏:

這是我想在工具列上有一個完成按鈕的片段:

但是當我按下完成按鈕時,它會回傳主螢屏并且完成按鈕也會出現在那里:

這是創建 appbar 的 MainActivity 代碼:
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
private lateinit var navController: NavController
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
val navHostFragment =
supportFragmentManager.findFragmentById(R.id.nav_host_fragment_container) as NavHostFragment
navController = navHostFragment.findNavController()
val bottomNavigationView = binding.bottomNavigationView
val navController = findNavController(R.id.nav_host_fragment_container)
val appBarConfiguration = AppBarConfiguration(setOf(
R.id.homeFragment,
R.id.budgetFragment,
R.id.statsFragment,
R.id.moreFragment
))
setupActionBarWithNavController(navController,appBarConfiguration)
supportActionBar?.setBackgroundDrawable(ColorDrawable(ContextCompat.getColor(this,R.color.purple)))//change toolbar color
bottomNavigationView.setupWithNavController(navController)
}
override fun onSupportNavigateUp(): Boolean {
return navController.navigateUp() || super.onSupportNavigateUp()
}
}
這是完成按鈕的選單:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@ id/done"
android:title="Done"
app:showAsAction="always"
android:icon="@drawable/ic_done"/>
</menu>
這是片段中的選單初始化:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding = FragmentIncomeBinding.bind(view)
val menuHost: MenuHost = requireActivity()
menuHost.addMenuProvider(object : MenuProvider {
override fun onCreateMenu(menu: Menu, menuInflater: MenuInflater) {
menuInflater.inflate(R.menu.done_button_menu, menu)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
if(menuItem.itemId == R.id.done){
val action = IncomeFragmentDirections.actionIncomeFragmentToHomeFragment()
findNavController().navigate(action)
}
return true
}
})
}
在片段中,后退按鈕也不起作用。
我能做些什么來避免這種情況?
uj5u.com熱心網友回復:
為了解決這個問題,我們的目標是為我們需要的每個 topbar/appbar 創建不同的布局檔案,并將這些布局包含在我們的片段中。確保使用 FrameLayout,因為它對性能是最好的,并且不會產生很大的開銷(嵌套復雜的布局,如 ConstraintLayout,如果過度使用會對性能產生影響)檢查此以在 xml 檔案中包含布局:https://developer .android.com/develop/ui/views/layout/improving-layouts/reusing-layouts
首先,進入你的themes.xml 并確保你的應用程式沒有像這樣的默認操作欄/應用欄:parent="Theme.AppCompat.NoActionBar"
基本上我們不會有2個頂欄以這種方式處于活動狀態。
然后,創建您的 FrameLayout 頂欄并將它們包含到您的復雜片段布局中。
如果您使用 viewBinding,您可以像這樣參考頂欄上的按鈕:fragmentBinding.topbar.doneButton
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/529713.html
