ViewPager2为我们提供了另一个FragmentStateAdapter
这是它的示例用法
class AddRestaurantPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragmentManager, lifecycle) {
override fun getItemCount() = 3
override fun createFragment(position: Int): Fragment {
val fragment = when (position) {
0 -> Page1()
1 -> Page2()
2 -> Page3()
else -> null
}!!
return fragment
}
}
这就是我们的使用方式。
val adapter = AddRestaurantPagerAdapter(fragmentManager!!, lifecycle)
addRestaurantVp.orientation = ViewPager2.ORIENTATION_HORIZONTAL
addRestaurantVp.adapter = adapter
addRestaurantVp.setPageTransformer(MarginPageTransformer(1300))
我没有看到任何机制可以用来从适配器获取已加载的片段。
一种技术是创建这样的List。
class AddRestaurantPagerAdapter(fragmentManager: FragmentManager, lifecycle: Lifecycle) :
FragmentStateAdapter(fragmentManager, lifecycle) {
var fragments = mutableListOf<Fragment>()
override fun getItemCount() = 3
override fun createFragment(position: Int): Fragment {
val fragment = when (position) {
0 -> RestaurantDetailsPage()
1 -> RestaurantWaiterPage()
2 -> RestaurantItemsPage()
else -> null
}!!
fragments.add(fragment)
return fragment
}
}
但是这很可能导致内存泄漏。还能以哪种方法从列表中删除片段?