問題
我有一個BottomNavigationView,我在其中使用導航組件來顯示片段。每次用戶單擊BottomNavigationView 中的專案時,我都需要檢查條件。使用導航組件執行此操作的最正確方法是什么?
我做了什么:(有沒有更有效的方法來做到這一點?)
val navController = findNavController(R.id.fragment)//this line I dont use it
binding.bottomNav.setupWithNavController(navController) //this line I dont use it
binding.bottomNav.apply {
setOnNavigationItemReselectedListener {
if (it.itemId == R.id.homeFragment) {
if(theUserWasLogged()){
setFragment(new HomeFragment())
}else{
displayDialogLogIn()
}
} else if (it.itemId == R.id.avisosFragment) {
setFragment(new avisosFragment())
}else{
displayDialogLogIn()
}
}
}
uj5u.com熱心網友回復:
要使用你的內部導航組件實作導航setOnNavigationItemReselectedListener,你應該使用navController并直接呼叫在你的導航圖定義你的目的地ID或動作ID,在你的情況下,更換setFragment()用navController.navigate(),即
setOnNavigationItemReselectedListener {
if (it.itemId == R.id.homeFragment) {
if(theUserWasLogged()){
navController.navigate(R.id.homeFragment)
}else{
displayDialogLogIn()
}
} else if (it.itemId == R.id.avisosFragment) {
navController.navigate(R.id.avisosFragment)
}else{
displayDialogLogIn()
}
}
而且我認為可以使用when,而不是if有更簡潔的代碼
setOnNavigationItemReselectedListener {
when (it.itemId) {
R.id.homeFragment -> {
if(theUserWasLogged()) {
navController.navigate(R.id.homeFragment)
} else {
displayDialogLogIn()
}
}
R.id.avisosFragment -> navController.navigate(R.id.avisosFragment)
else -> displayDialogLogIn()
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325932.html
