我使用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)
有什么办法吗?
2条答案
按热度按时间wnavrhmk1#
我找不到解决这个问题的方法,但是无论如何,你对这个行为有什么问题?如果你需要一个回调,当片段是可见的,你可以使用onResume回调。如果你想onResume代码不调用两次,你可以在onResume的末尾设置一个变量(布尔值)为true,并在onResume的第一行检查它的值。
mklgxw1f2#
你可以试试这个link
设置
offscreenPageLimit = size
,片段将扩展LazyFragment
实现覆盖
getContentViewId()
返回R.layout.your_layout
这将首次初始化布局,但不初始化视图。重写
initView()
、initData()
、initEvent()
,并将您代码放在这些方法中。