【发布时间】:2021-08-13 07:49:54
【问题描述】:
有一个活动应用程序,我有 HomeFragment 从中打开 HostFragment,HostFragment 有 ViewPager2,其中包含 3 个片段项 TabFragment1、TabFragment2 和 TabFragment3。
当我打开 HostFragment,然后返回时,我的 tabFragment 的实例不会被删除。以下是生命周期的日志
navController.navigate(directionToHostFragment)
- HostFragment OnStart HostFragment{c37542c}
- TabFragment1 OnStart TabFragment1 {f41b08}
navController.popBackStack()
- HostFragment OnPause HostFragment{c37542c}
- HostFragment OnStop{c37542c}
- HostFragment OnDestroy {c37542c}
navController.navigate(directionToHostFragment) 块引用
- HostFragment OnStart{2670c03}
- TabFragment1 OnStart{f45b87d}
navController.popBackStack()
- HostFragment OnPause{2670c03}
- HostFragment OnStop{2670c03}
- HostFragment onDestroy{2670c03}
从 ids 你可以看到有一个新的 TabFragment1 实例,旧的还没有销毁(我有登录 onPause()、onStop() 等)。
一些代码sn-ps: 我使用的 viewPager2 适配器 -
class LessonTabsAdapter(fragmentActivity: FragmentActivity, val pages: List<BaseFragment>) :
FragmentStateAdapter(fragmentActivity) {
override fun getItemCount() = pages.size
override fun createFragment(position: Int) = pages[position]
}
TabFragment1 的一部分
class TabFragment1 : BaseFragment(R.layout.fragment_tab_1) {
private var mediaPlayer: MediaPlayerClass? = null
private lateinit var player: SimpleExoPlayer
private val viewModel by sharedViewModel<SomeViewModel>()
private val binding by viewDataBinding(FragmentTab1Binding::bind)
//Overriden onViewCreated(..) and some private methods
}
那么任何提示如何处理这个问题?
【问题讨论】:
标签: android android-viewpager android-viewpager2 fragment-lifecycle fragmentstateadapter