离开屏幕时未销毁Android ViewPager片段

时间:2018-11-29 08:09:06

标签: android android-fragments android-viewpager

我有一些片段,这些片段在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
    }
}

1 个答案:

答案 0 :(得分:2)

将viewPager与另一个片段中的片段一起使用时,应调用getChildFragmentManager()而不是getFragmentManager()