我有一些片段,这些片段在ViewPager中进行管理,并且效果很好。它使用FragmentStatePagerAdapter来管理片段,它们都来自同一类型。
此ViewPager在父片段中工作。 但是,当用户单击“后退”按钮离开父片段时,ViewPager内部的片段将不会进入“暂停”->“销毁”->“ onDetach”等。
即使创建PagerAdapter的父片段已被破坏并正确分离,它们似乎仍保持其onResume状态,即使它们不再可见。
想象一下,当用户似乎已经在另一个屏幕中时,然后当他单击主页按钮时,我可以看到ViewPager中的片段(不再可见)进入了暂停状态,并且当用户导航回到该应用程序,我可以看到ViewPager中的片段在不可见时再次恢复。
对这种行为有什么解释吗?
我的代码的以下部分在父片段中初始化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
}
}
答案 0 :(得分:2)
将viewPager与另一个片段中的片段一起使用时,应调用getChildFragmentManager()
而不是getFragmentManager()
。