我在BottomNavigationView中有三个标签A,B,C,每个都有导航图。
通过一个复杂的导航扩展,我可以在导航2.3.3中完美地完成我想做的事情,就像旧的建筑.部件.样品一样。这个示例现在升级到2.4.0。它们使用的代码更少。
我想要的是:
步骤:图A的起始目标片段A1导航到A2。
步骤:点击标签B或C。
navigateUp动作回到A (工作正常)startDestination的popBackStack。(如果setOnItemReselectedListener不改变,如何设置navController?)startDestination片段A1、B1、C1是顶级目的地,因此B1和C1的工具栏不显示返回图标。(工作正常,因为示例将这3段中的一组而不是navController.graph设置为AppBarConfiguration)2.4.0说它支持多个背靠背堆栈。,这是什么意思?我可以在2.4.0中制作我的BottomNavigationView吗?
我是这样做的"3. BottomNavigationView‘s ItemReselected行动.“在2.3.3中:
private fun BottomNavigationView.setupItemReselected(
graphIdToTagMap: SparseArray<String>,
fragmentManager: FragmentManager
) {
setOnNavigationItemReselectedListener { item ->
... // get the item' s navController
navController.popBackStack(
navController.graph.startDestination, false
)
}
}我在2.4.0中所做的工作:只需复制示例代码。
发布于 2022-03-16 10:10:45
添加setOnItemReselectedListener和popBackStack
import android.util.SparseIntArray
import androidx.core.util.getOrElse
private val startDestinationIdByNavId: SparseIntArray by lazy(NONE) {
SparseIntArray(5).apply {
put(R.id.tab_home_nav, R.id.tabHomeFragment)
put(R.id.tab_profile_nav, R.id.tabMyProfileFragment)
}
}
fun setupViews() {
binding.bottomNavView.run {
setupWithNavController(navController)
// Pop the back stack to the start destination of the current navController graph
setOnItemReselectedListener {
navController.popBackStack(
destinationId = startDestinationIdByNavId.getOrElse(it.itemId) {
error("Unknown menu item $it")
},
inclusive = false,
)
}
}
}https://stackoverflow.com/questions/70858513
复制相似问题