繁体   English   中英

您可以将分页库和 PagedList 与 ViewPager 一起使用吗?

[英]Can you use paging library and PagedList with a ViewPager?

我想使用带有分页库和 PagedList 的 ViewPager。 有没有办法做到这一点? 如果是,那么我应该使用什么适配器?

现在我使用 FragmentStatePagerAdapter 和完整的项目列表。 我想按需加载项目页面,而不是一次加载所有数据。

这就是我目前正在玩的。 我已经看到它分页,但我需要编写一些测试来确保这实际上提供了任何好处。 仍有很大的改进空间,但我认为这是它发挥作用所必需的核心。

这就需要你.setInitialLoadKey上的PageList 我无法让它响应.smoothScrollToPosition类的.smoothScrollToPosition 它在图像查看器 atm 中工作。

abstract class PagedListPagerAdapter<T>(fm: FragmentManager)
    : FragmentStatePagerAdapter(fm) {

    var pagedList: PagedList<T>? = null
        private set
    private var callback = PagerCallback()

    override fun getCount() = pagedList?.size ?: 0

    abstract fun createItem(position: Int): Fragment

    abstract var isSmoothScroll: Boolean

    override fun getItem(position: Int): Fragment {
        pagedList?.loadAround(position)
        return createItem(position)
    }

    fun getValue(position: Int): T? {
        return pagedList?.get(position)
    }

    fun submitList(pagedList: PagedList<T>?) {
        this.pagedList?.removeWeakCallback(callback)
        this.pagedList = pagedList
        this.pagedList?.addWeakCallback(null, callback)
        notifyDataSetChanged()
    }

    private inner class PagerCallback : PagedList.Callback() {
        override fun onChanged(position: Int, count: Int) = notifyDataSetChanged()
        override fun onInserted(position: Int, count: Int) = notifyDataSetChanged()
        override fun onRemoved(position: Int, count: Int) = notifyDataSetChanged()
    }
}

class ViewerAdapter(fm: FragmentManager)
    : PagedListPagerAdapter<ImageInfo>(fm) {

    override var isSmoothScroll = false

    override fun createItem(position: Int): Fragment {
        val fragment = ViewPagerFragment()
        fragment.source = getValue(position)
        return fragment
    }
}

我通过关注此博客https://medium.com/@programmerr47/pagedlist-in-viewpager-976e7413ec46,将 FragmentStateAdapter 与 PagedList 一起使用

技巧是您创建一个类/抽象类,根据您的功能扩展 FragmentStateAdapter 或 ViewPager 或任何类似的类,并将 PagedList 添加到其中。 然后另一个类继承/实现它。

在第二个类对象上调用 submitList(我们的自定义方法),您将需要处理其余部分。 不过,这个博客很好地利用了资源和回调来提高效率。

请记住,您不能直接访问 PagedList 的内容,因此不要浪费时间

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM