从新的FragmentStateAdapter获取加载的片段

时间:2019-09-23 11:14:07

标签: android android-viewpager android-viewpager2

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
    }
}

但是这很可能导致内存泄漏。还能以哪种方法从列表中删除片段?

0 个答案:

没有答案
相关问题