当我们想要使用 android 分页组件进行分页时,我们会使用 Datasource。
有很多方法可以实现它,
首先实现分页库
implementation "android.arch.paging:runtime:2.1.0"
现在把数据源转成LiveData最简单的方法就是这样
fun getElementsLiveData(): LiveData<PagedList<Person>> {
val data = mDao.getElements()
return LivePagedListBuilder(data, 10).build() // 10 is page size
}
您也可以在页面大小上传递配置
fun getElementsLiveData(): LiveData<PagedList<Person>> {
val pagedListConfig = PagedList.Config.Builder()
.setEnablePlaceholders(true)
.setInitialLoadSizeHint(15)
.setPageSize(10)
.build()
val data = mDao.getElements()
return LivePagedListBuilder(data, pagedListConfig).build()
}
现在像这样创建您的寻呼机适配器和视图支架
class ElementAdapter(
private val clickListener: ClickListener
) : PagedListAdapter<Person, ElementViewHolder>(diffCallback) {
override fun onBindViewHolder(holder: ElementViewHolder, position: Int) {
val person = getItem(position)
with(holder) {
// bind your data here
}
}
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ElementViewHolder =
ElementViewHolder(parent)
companion object {
/**
* This diff callback informs the PagedListAdapter how to compute list differences when new
* PagedLists arrive.
*/
private val diffCallback = object : DiffUtil.ItemCallback<Person>() {
override fun areItemsTheSame(oldItem: Person, newItem: Person): Boolean =
oldItem.id == newItem.id
override fun areContentsTheSame(oldItem: News, newItem: News): Boolean =
oldItem.title == newItem.title
}
}
}
之后,在您的活动或片段中,您可以使用视图模型简单地观察数据更改并将您的数据提交给适配器
viewModel.getElementsLiveData().observer(this, Observer{pagedList->
adaoter.submitList(pagedList)
})