从 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
}