回收后,FragmentStateAdapter不显示带有参数的片段

时间:2020-07-21 03:52:26

标签: android android-fragments android-viewpager

我正尝试迁移到FragmentStateAdapter,但显示片段时出现问题。 当我第一次加载适配器时,已经为每个Fragment调用了createFragment()。因此,从一开始,我就会看到带有正确数据的片段。但是,当我来回滑动时-第一个片段开始显示为空白白屏,如果再次进行滑动,则第二个页面也将显示空白页。 我试图在父视图中将背景色设置为def参数,以检查片段是否仍已从片段管理器中还原。结果表明,是的-它们在那里,但是因为我正在使用参数声明将在此片段中显示的类型-回收参数之后,该参数不再存在,这就是为什么我看到空白的页面。

如果我错了,请纠正我,什么解决方案更适合这里? 谢谢

class ReviewContractAdapter(activity: FragmentActivity, private val cacheDirAbsolutePath: String):
    FragmentStateAdapter(activity) {

    companion object {
        const val REVIEW_CONTRACT_NUMBER_OF_PAGES = 2
        const val CONTRACT = "Contract"
        const val PAD = "PAD"
    }

    override fun getItemCount(): Int = REVIEW_CONTRACT_NUMBER_OF_PAGES

    override fun createFragment(position: Int): Fragment {
        return PdfViewerFragment().apply {
            arguments = Bundle().apply {
                when (position) {
                    0 -> putString(CONTRACT_FILE_PATH, cacheDirAbsolutePath + CONTRACT_PATH)
                    else -> putString(PAD_FILE_PATH, cacheDirAbsolutePath + PAD_PATH)
                }
            }
        }
    }
}

使用活动初始化适配器 没什么特别的

review_contract_viewpager.adapter = adapter
    TabLayoutMediator(review_contract_tabs, review_contract_viewpager) { tab, position ->
        tab.text = when (position) {
            0 -> ReviewContractAdapter.CONTRACT
            else -> ReviewContractAdapter.PAD
        }
    }.attach()

0 个答案:

没有答案