如何解决如何更改分页库Android的请求PageKeyedDataSource
我需要更改 PageKeyedDataSource 改造查询以过滤产品。我搜索了很多来源,但其中很多都显示在获取数据后根据内容进行过滤。但就我而言,我需要更改改造请求。
我喜欢什么,
我的视图模型
class SubCategoryViewModel(private val categoryRepository: CategoryRepository) : ViewModel() {
private lateinit var _networkState : LiveData<NetworkState>
// entities
var productList : LiveData<PagedList<Product>> ?= null
lateinit var productDataSourceFactory: ProductDataSourceFactory
private val pagedLsConfig = PagedList.Config.Builder()
.setEnablePlaceholders(false)
.setInitialLoadSizeHint(10)
.setPageSize(20)
.build()
fun getLatestCategory(keyword: String){
productDataSourceFactory = ProductDataSourceFactory(categoryRepository.tjbApiService,categoryRepository.ctx,keyword,null,null)
productList = LivePagedListBuilder(productDataSourceFactory,pagedLsConfig)
.build()
_networkState = Transformations.switchMap(productDataSourceFactory.getMutableLiveData()){ dataSource ->
dataSource.getNetworkState()
}
}
/** THIS IS NOT WORKING **/
fun query(keyword: String,type: String?,spesifikasi: String?){
productDataSourceFactory = ProductDataSourceFactory(categoryRepository.tjbApiService,type,spesifikasi)
productList = LivePagedListBuilder(productDataSourceFactory,pagedLsConfig)
.build()
productDataSourceFactory.changeQuery()
}
fun getNetworkState() : LiveData<NetworkState> = _networkState
}
我的数据源工厂
class ProductDataSourceFactory(
private val tjbApiService: TJBApiService,private val context: Context,private val keyword: String,private val type: String?,private val spesifikasi: String?
) : DataSource.Factory<Long,Product>() {
private var mutableLivedata : MutableLiveData<PageKeyedProductDataSource> = MutableLiveData()
private lateinit var pageKeyedProductDataSource : PageKeyedProductDataSource
override fun create(): DataSource<Long,Product> {
pageKeyedProductDataSource = PageKeyedProductDataSource(tjbApiService,context,spesifikasi)
mutableLivedata.postValue(pageKeyedProductDataSource)
return pageKeyedProductDataSource
}
/** Not Working here **/
fun changeQuery() {
pageKeyedProductDataSource = PageKeyedProductDataSource(tjbApiService,spesifikasi)
mutableLivedata.postValue(pageKeyedProductDataSource)
mutableLivedata.value?.invalidate()
}
fun getMutableLiveData() : LiveData<PageKeyedProductDataSource> = mutableLivedata
}
这是我的PageKeyedDataSource
class PageKeyedProductDataSource(
private val tjbApiService: TJBApiService,private val spesifikasi: String?
) : PageKeyedDataSource<Long,Product>() {
private val FIRST_PAGE : Int = 1
private val _networkState = MutableLiveData<NetworkState>()
private val _initialLoading = MutableLiveData<NetworkState>()
fun getNetworkState() : LiveData<NetworkState> = _networkState
override fun loadInitial(
params: LoadInitialParams<Long>,callback: LoadInitialCallback<Long,Product>
) {
println("PAGING LOADINITIAL 1 ${params.requestedLoadSize}")
Coroutines.io {
val dataRes = tjbApiService.getSubcategory(
context.getString(R.string.api_key),spesifikasi,1,10
)
Timber.d("JOEL - request - ${dataRes.raw().request().url()}")
if(dataRes.isSuccessful){
// post value Success
}else{
// post value failed
}
}
}
override fun loadAfter(params: LoadParams<Long>,callback: LoadCallback<Long,Product>) {
_networkState.postValue(NetworkState.LOADING)
Coroutines.io {
val dataRes = tjbApiService.getSubcategory(
context.getString(R.string.api_key),params.key.toInt(),10
)
Timber.d("JOEL - request - ${dataRes.raw().request().url()}")
if(dataRes.isSuccessful){
// post value Success
}else{
// post value failed
}
}
}
override fun loadBefore(params: LoadParams<Long>,10
)
if(dataRes.isSuccessful){
// post value Success
}else{
// post value failed
}
}
}
}
我想要实现的是刷新当前片段(种植我的 Recyclerview 的地方)并使用新的构造函数参数重置分页库。如果这个问题不清楚,请告诉我,以便我更新。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。