Android 您可以将分页库和分页列表与ViewPager一起使用吗?
我想使用带有分页库和分页列表的ViewPager。有办法做到这一点吗?如果是,那么我应该使用什么适配器Android 您可以将分页库和分页列表与ViewPager一起使用吗?,android,android-viewpager,android-architecture-components,android-paging,android-paging-library,Android,Android Viewpager,Android Architecture Components,Android Paging,Android Paging Library,我想使用带有分页库和分页列表的ViewPager。有办法做到这一点吗?如果是,那么我应该使用什么适配器 现在我使用FragmentStatePagerAdapter和完整的项目列表。我想按需加载项目页面,而不是一次加载所有数据。这就是我目前正在玩的游戏。我见过它的分页,但我需要编写一些测试来确保它实际上提供了任何好处。仍然有很大的改进空间,但我认为这是它运行所必需的核心 这需要您在页面列表上设置.setInitialLoadKey。我无法让它响应类似.smoothScrollToPosition
现在我使用FragmentStatePagerAdapter和完整的项目列表。我想按需加载项目页面,而不是一次加载所有数据。这就是我目前正在玩的游戏。我见过它的分页,但我需要编写一些测试来确保它实际上提供了任何好处。仍然有很大的改进空间,但我认为这是它运行所必需的核心 这需要您在
页面列表
上设置.setInitialLoadKey
。我无法让它响应类似.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()
}
}
抽象类PagedListPagerAdapter(fm:FragmentManager)
:FragmentStatePagerAdapter(调频){
变量pagedList:pagedList?=空
专用设备
private var callback=PagerCallback()
重写fun getCount()=页面列表?.size?:0
抽象项(位置:Int):片段
抽象变量isSmoothScroll:布尔值
覆盖趣味getItem(位置:Int):片段{
页面列表?.loadAround(位置)
返回createItem(位置)
}
fun getValue(位置:Int):T{
返回页面列表?获取(位置)
}
有趣的提交列表(页面列表:页面列表?){
此.pagedList?.removeWeakCallback(回调)
this.pagedList=页面列表
this.pagedList?.addWeakCallback(null,回调)
notifyDataSetChanged()
}
私有内部类PagerCallback:PagedList.Callback(){
override-fun-onChanged(位置:Int,计数:Int)=notifyDataSetChanged()
override fun onInserted(位置:Int,计数:Int)=notifyDataSetChanged()
覆盖已删除(位置:Int,计数:Int)=notifyDataSetChanged()
}
}
class ViewerAdapter(fm:FragmentManager)
:PagedListPagerAdapter(调频){
覆盖变量isSmoothScroll=false
覆盖趣味createItem(位置:Int):片段{
val fragment=ViewPagerFragment()
fragment.source=getValue(位置)
返回片段
}
}
我跟随这个博客使用了带有页面列表的FragmentStateAdapter
黑客是根据您的功能创建一个类/抽象类,扩展FragmentStateAdapter或ViewPager或任何类似的类,并向其中添加PagedList。
然后是继承/实现它的另一个类
在第二个类对象上调用submitList(我们的自定义方法),您将需要处理其余的。不过,这个博客很好地利用了资源和回调来提高效率
请记住,您无法直接访问页面列表的内容,因此不要浪费时间
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
}
}