Is there a way to navigate from a child fragment of ViewPager2 to another fragment? Let's say I have a parent fragment [ParentFragment] containing only a ViewPager2 and a TabLayout. I have 2 children fragments [ChildrenFragment1 and ChildrenFragment2] created with FragmentStateAdapter. I want to navigate from ChildrenFragment2 to another FragmentB so that when i navigate back from FragmentB, to show position of the ParentFragment to ChildFragment2?
ex: ChildFragment1 -> ChildFragment2 -> FragmentB -> ChildFragment2
I get:
java.lang.IllegalArgumentException: Navigation action/destination id:actionChildFragment2_to_FragmentB cannot be found from the current destination
I found a solution, i keep the current page in a ViewModel LiveData property, setting it on page change inside the ParentFragment:
binding.viewPager.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() {
override fun onPageSelected(page: Int) {
viewModel.updatePageSelected(page)
}
})
and observe the page change inside the ParentFragment:
subscribeToLiveData(viewModel.viewPagerSelected) { page ->
binding.viewPager.setCurrentItem(page, false)
}
The ParentViewModel:
private val _viewPagerSelected = MutableLiveData<Int>()
val viewPagerSelected: LiveData<Int> = _viewPagerSelected
fun updatePageSelected(newSelection: Int) {
_viewPagerSelected.value = newSelection
}