gpt4 book ai didi

android - 如何使用分页库android使用空 View 和分页?

转载 作者:IT老高 更新时间:2023-10-28 13:48:09 28 4
gpt4 key购买 nike

  • 在设置适配器之前如何确定返回数据的大小?
  • 如何在分页库中使用emptyview?
  • pagedlist返回null或无数据时如何设置emptyview?

最佳答案

更新[24/04/19]:我刚刚发现库已经为我们提供了一种监听空初始加载的方法,使用 PagedList.BoundaryCallback<YourItem> .

*请注意,我的旧答案仍然是一个有效的选择。

val livedPageList = LivePagedListBuilder(sourceFactory, config)
.setBoundaryCallback(object: PagedList.BoundaryCallback<YourItem>() {
override fun onZeroItemsLoaded() {
super.onZeroItemsLoaded()
// Handle empty initial load here
}

override fun onItemAtEndLoaded(itemAtEnd: YourItem) {
super.onItemAtEndLoaded(itemAtEnd)
// Here you can listen to last item on list
}

override fun onItemAtFrontLoaded(itemAtFront: YourItem) {
super.onItemAtFrontLoaded(itemAtFront)
// Here you can listen to first item on list
}
})
.build()

原答案:

基于 google 示例 Network State 上的此类.修改它以处理 initialLoad 中的空内容。

@Suppress("DataClassPrivateConstructor")
data class NetworkState private constructor(
val status: Status,
val msg: String? = null
) {

enum class Status {
RUNNING,
SUCCESS_LOADED, // New
SUCCESS_EMPTY, // New
FAILED
}

companion object {

val EMPTY = NetworkState(Status.SUCCESS_EMPTY) // New
val LOADED = NetworkState(Status.SUCCESS_LOADED) // New
val LOADING = NetworkState(Status.RUNNING)
fun error(msg: String?) = NetworkState(Status.FAILED, msg)
}
}

用法如下:

class DataSource: PageKeyedDataSource<Long, Item>() {

val initialLoad: MutableLiveData<NetworkState> = MutableLiveData()

override fun loadInitial(params: LoadInitialParams<Long>, callback: LoadInitialCallback<Long, Item>) {
initialLoad.postValue(NetworkState.LOADING)
apiCallSource.subscribe({ items ->
if (items.isEmpty()) {
initialLoad.postValue(NetworkState.EMPTY)
} else {
initialLoad.postValue(NetworkState.LOADED)
}
}, { error ->
// handle error
})
}
}

这就是 Activity 处理它的方式:

class activity: AppCompatActivity() {

val viewModel = // init viewmodel

override fun onCreate(savedInstanceState: Bundle?) {
viewModel.refreshState.observe(this, Observer { networkState ->
if (it == NetworkState.LOADING) {
// Show loading
} else {
// Hide loading

if (it.status == NetworkState.Status.SUCCESS_EMPTY) {
// Show empty state for initial load
}
}
}
}
}

有关如何将 DataSourceActivity 连接的详细信息,请参阅此 sample

关于android - 如何使用分页库android使用空 View 和分页?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53313044/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com