Мне было интересно, можно ли detach
просмотреть фрагмент пейджера 2 вручную, потому что я не смог вызвать onDetach
, что привело к некоторым сбоям (поскольку он может работать в фоновом режиме) во фрагменте viewPagers.
//ViewPagerPage1.kt
override fun onDetach(){
super.onDetach()
Log.d("TAG", "VP fragment Detached")//doesn't show up
Я пробовал такие вещи, как:
//Main.kt
override fun onDetach(){
super.onDetach()
//Parent fragement where viewPager implement
viewPager.removeAllViews()//no luck
}
или внутри 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()
}
но эти вещи не работают, я также пытался добавить журнал в оба фрагмента (просмотреть родительский и дочерний пейджер)
//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")
}
в результате при нажатии "назад" отображается только TAG: fragment Detached
Примечание Main.kt
— это фрагмент, содержащий ViewPagerPage1
если вам нужен адаптер:
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
}
}
notifyDataSetChanged()
наViewPager2
или проверить это: stackoverflow.com/questions/61736940/. - person Sam Chen   schedule 24.05.2021