ViewPager2 : 只在片段可见时初始化片段,然后保持初始化状态

ViewPager2 : Initialize fragments only when they are visiblee, and then keep them initialized

我使用 ViewPager2 管理了 4 个片段。

我只想在第一次打开时初始化每个片段,这意味着当我打开应用程序时,只有第一个片段被初始化,而第二个片段只有在我导航到它时才会被初始化。

当我不做任何特殊配置时,这似乎是 viewpager2 的默认行为。

但是我想做的是当我导航到第二个片段时不丢失第一个片段的实例。

我尝试使用 viewpager.isUserInputEnabled = 4(或 1)。此函数保持片段初始化并且不会丢失它们的实例。但是它一次初始化所有片段,我只想在它们可见时初始化它们。

这是我的适配器

class HomeAdapter(fragmentActivity : FragmentActivity) : FragmentStateAdapter(fragmentActivity)
{
    override fun getItemCount() : Int = 4
    
    
    override fun createFragment(position : Int) : Fragment
    {
        return when(position)
        {
            0 -> SearchMissionContainerFragment.instance()
            1 -> MissionHistoryFragment.instance()
            2 -> PaymentContainerView.instance()
            else -> SettingsFragment.instance()
        }
    }
}

这是初始化部分

binding.viewpager.offscreenPageLimit = 1
binding.viewpager.isUserInputEnabled = false
binding.viewpager.adapter = HomeAdapter(this)

有什么解决办法吗?

我找不到解决这个问题的办法,但不管怎样,你对这种行为有什么问题?如果您需要在片段可见时进行回调,您可以使用 onResume 回调。如果你不想让 onResume 代码调用两次,你可以在 onResume 的末尾将一个变量(布尔值)设置为 true 并在 onResume 的第一行检查它的值。