从 Android ViewPager2 子片段导航到另一个片段
Navigate from Android ViewPager2 child fragment to another fragment
有没有办法从 ViewPager2 的子片段导航到另一个片段?
假设我有一个仅包含 ViewPager2 和 TabLayout 的父片段 [ParentFragment]。我有 2 个使用 FragmentStateAdapter 创建的子片段 [ChildrenFragment1 和 ChildrenFragment2]。我想从 ChildrenFragment2 导航到另一个 FragmentB,以便当我从 FragmentB 导航回来时,显示 ParentFragment 到 ChildFragment2 的位置?
例如:ChildFragment1 -> ChildFragment2 -> FragmentB -> ChildFragment2
我得到:
java.lang.IllegalArgumentException: Navigation action/destination id:actionChildFragment2_to_FragmentB cannot be found from the current destination
我找到了一个解决方案,我将当前页面保存在 ViewModel LiveData 属性 中,在 ParentFragment 中将其设置为页面更改:
binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(page: Int) {
viewModel.updatePageSelected(page)
}
})
并观察ParentFragment内部的页面变化:
subscribeToLiveData(viewModel.viewPagerSelected) { page ->
binding.viewPager.setCurrentItem(page, false)
}
ParentViewModel:
private val _viewPagerSelected = MutableLiveData<Int>()
val viewPagerSelected: LiveData<Int> = _viewPagerSelected
fun updatePageSelected(newSelection: Int) {
_viewPagerSelected.value = newSelection
}
有没有办法从 ViewPager2 的子片段导航到另一个片段? 假设我有一个仅包含 ViewPager2 和 TabLayout 的父片段 [ParentFragment]。我有 2 个使用 FragmentStateAdapter 创建的子片段 [ChildrenFragment1 和 ChildrenFragment2]。我想从 ChildrenFragment2 导航到另一个 FragmentB,以便当我从 FragmentB 导航回来时,显示 ParentFragment 到 ChildFragment2 的位置?
例如:ChildFragment1 -> ChildFragment2 -> FragmentB -> ChildFragment2
我得到:
java.lang.IllegalArgumentException: Navigation action/destination id:actionChildFragment2_to_FragmentB cannot be found from the current destination
我找到了一个解决方案,我将当前页面保存在 ViewModel LiveData 属性 中,在 ParentFragment 中将其设置为页面更改:
binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(page: Int) {
viewModel.updatePageSelected(page)
}
})
并观察ParentFragment内部的页面变化:
subscribeToLiveData(viewModel.viewPagerSelected) { page ->
binding.viewPager.setCurrentItem(page, false)
}
ParentViewModel:
private val _viewPagerSelected = MutableLiveData<Int>()
val viewPagerSelected: LiveData<Int> = _viewPagerSelected
fun updatePageSelected(newSelection: Int) {
_viewPagerSelected.value = newSelection
}