I was wondering if it was possible to detach
view pager 2 fragment manually, because I wasn't able to call onDetach
which result some crashes (since it can run on the background) on viewPagers fragment.
//ViewPagerPage1.kt
override fun onDetach(){
super.onDetach()
Log.d("TAG", "VP fragment Detached")//doesn't show up
I tried things like:
//Main.kt
override fun onDetach(){
super.onDetach()
//Parent fragement where viewPager implement
viewPager.removeAllViews()//no luck
}
or scoped inside Coroutine
:
//Main.kt
val job = CoroutineScope(Main).launch {
view.apply {
val listOfFragment = arrayListOf<Fragment>(
...
)
val adapter = TabsPagerAdapter(
listOfFragment,
requireActivity().supportFragmentManager,
requireActivity(),
lifecycle
)
adapter
viewPager1.adapter = adapter
val tabNames = listOf<String>(
...
)
TabLayoutMediator(tabLayout, viewPager) { tab, p ->
viewPager.setCurrentItem(tab.position, true)
tab.text = tabNames[p]
}.attach()
}
}
//Main.kt
override fun onDetach(){
super.onDetach()
job.cancel()
}
yet these things doesn't work I also tried adding log to both fragment (view pager parent and child)
//ViewPagerPage1.kt
override fun onDetach(){
super.onDetach()
Log.d("TAG", "VP fragment Detached")
}
//Main.kt
override fun onDetach(){
super.onDetach()
Log.d("TAG", "fragment Detached")
}
as result when back is pressed TAG: fragment Detached
only show up
Note Main.kt
is the fragment which contains ViewPagerPage1
incase if you want the adapter:
class TabsPagerAdapter(val array: ArrayList<Fragment>,
val manager: FragmentManager,
val context: Context,
val lifecycle: Lifecycle): FragmentStateAdapter(manager, lifecycle){
override fun createFragment(position: Int): Fragment {
return array[position]
}
override fun getItemCount(): Int {
return array.size
}
}