Exp*_*ind 6 android filtering pagedlist kotlin
我使用 Android Paging 库为我的列表实现了无限滚动。我根据页面从 API 中下载数据。我的应用程序允许用户通过在 API 查询中添加一些参数来过滤项目。启用过滤后,我喜欢将parameters
字段更改为PageKeyedDataSource
实例并重置加载程序(我想将页面设置为 1 并在其中调用 loadInitial 方法)
DataSource(private var initialData: List<Data>, var parameters: HashMap<String, String>) : PageKeyedDataSource<Int, Data>() {
override fun loadInitial(params: LoadInitialParams<Int>, callback: LoadInitialCallback<Int, Data>) {
callback.onResult(initialData, null, 2)
}
override fun loadAfter(params: LoadParams<Int>, callback: LoadCallback<Int, Data>) {
val page = params.key
parameters[PAGE] = page.toString()
val request = ApiRequest()
request.setOnDataObtainListener {
callback.onResult(it,page.inc())
}
request.getData(parameters)
}
override fun loadBefore(params: LoadParams<Int>, callback: LoadCallback<Int, Data>) {
}
fun reset(initialData: List<Data>, parameters: HashMap<String, String>) {
this.parameters = parameters
this.initialData = initialData
invalidate()
}
}
Run Code Online (Sandbox Code Playgroud)
我的视图模型类
ViewModelData : ViewModel() {
private var dataList: LiveData<PagedList<Data>>? = null
private var dataSourceFactory: DataSourceFactory? = null
fun loadData(initialData: List<Data>, parameters: HashMap<String, String>): LiveData<PagedList<Data>> {
if (newsDataList == null) {
dataSourceFactory = DataSourceFactory(initialData, parameters)
val config = PagedList.Config.Builder()
.setPageSize(10)
.setInitialLoadSizeHint(10)
.setEnablePlaceholders(false)
.build()
if (dataSourceFactory != null) {
dataList = LivePagedListBuilder<Int, Data>(dataSourceFactory!!, config)
.setInitialLoadKey(1)
.build()
}
}
return dataList as LiveData<PagedList<Data>>
}
fun reset(initialData: List<Data>,parameters: HashMap<String, String>) {
dataSourceFactory?.dataSourceLiveData?.value?.reset(initialData,parameters)
}}
Run Code Online (Sandbox Code Playgroud)
我猜invalidate
会工作,但我无法从适配器清除 PagedList。
该函数将清除屏幕上的当前列表
adapter.submitList(null)
Run Code Online (Sandbox Code Playgroud)
adapter
- RecyclerView 的适配器
这清除了 pagingDataSource
pagedList.value.dataSource.invalidate()
Run Code Online (Sandbox Code Playgroud)
然后我们可以加载一个新列表
归档时间: |
|
查看次数: |
710 次 |
最近记录: |