我有一些片段,它们在ViewPager中进行管理,运行得很好。它使用FragmentStatePagerAdapter来管理片段,并且所有片段都来自同一类型。
此ViewPager在父片段内部工作。然而,当用户单击后退按钮离开父片段时,ViewPager中的片段不会进入Pause->Destroy->onDetach etc'
尽管创建PagerAdapter的父片段已被销毁并正确分离,但即使它们不再可见,它们似乎仍保持在onResume状态。
想象一下,当用户似乎已经在另一个屏幕上时,当他单击主页按钮时,我可以看到ViewPager中的片段(不再可见(进入暂停状态,当用户导航回应用程序时,我会看到ViewPageer中的片段在不可见时再次恢复。
这种行为有什么解释吗?
以下是我在父片段中初始化PagerAdapter的代码部分:
private fun configureScreen() {
tabs_view_pager.offscreenPageLimit = TabsPagerAdapter.NUM_PAGES - 1
fragmentManager?.let {
tabsPagerAdapter = TabsPagerAdapter(it)
tabs_view_pager.adapter = tabsPagerAdapter
}
}
这里是PagerAdapter代码的一部分:
class TabsPagerAdapter(fm : FragmentManager) : FragmentStatePagerAdapter(fm) {
companion object {
const val NUM_PAGES = 3
private var pagesTitle = arrayOf("" , "", "")
}
override fun getItem(item: Int): Fragment {
return ChildFragment.newInstance()
}
override fun getCount(): Int {
return NUM_PAGES
}
fun updateChildFragments(someData: FragmentData?) {
//process new data
notifyDataSetChanged()
}
}
override fun getItemPosition(fragment: Any): Int {
(fragment as ChildFragment).refresh()
return PagerAdapter.POSITION_UNCHANGED
}
}
当使用另一个片段中包含片段的viewPager时,应该调用getChildFragmentManager()
而不是getFragmentManager()
。