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 的第一行检查它的值。
我使用 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 的第一行检查它的值。