Android ViewPager碎片在离开屏幕时未被销毁



我有一些片段,它们在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()

最新更新