Dam*_*tes 7 android android-architecture-components android-paging
分页库很棒.但我发现缺乏这个功能:
PageKeyedDataSource:loadInitial调用时顶部的视图,loadAfter调用时列表底部的视图.callback调用时视图应该消失.由于现在不可能,有没有人知道使用PagingLibrary的方法?至少在同一列表中使用不同视图的方法.
有很棒的示例@yigit 与分页库相关,它也展示了如何在 Recyclerview 中处理进度条、错误和重试。所以基本上他正在创建一个Listing.kt数据类,它由下面的NetworkState和PagedList喜欢的组成
清单.kt
data class Listing<T>(
// the LiveData of paged lists for the UI to observe
val pagedList: LiveData<PagedList<T>>,
// represents the network request status to show to the user
val networkState: LiveData<NetworkState>,
// represents the refresh status to show to the user. Separate from networkState, this
// value is importantly only when refresh is requested.
val refreshState: LiveData<NetworkState>,
// refreshes the whole data and fetches it from scratch.
val refresh: () -> Unit,
// retries any failed requests.
val retry: () -> Unit)
Run Code Online (Sandbox Code Playgroud)
网络状态.kt
enum class Status {
RUNNING,
SUCCESS,
FAILED
}
@Suppress("DataClassPrivateConstructor")
data class NetworkState private constructor(
val status: Status,
val msg: String? = null) {
companion object {
val LOADED = NetworkState(Status.SUCCESS)
val LOADING = NetworkState(Status.RUNNING)
fun error(msg: String?) = NetworkState(Status.FAILED, msg)
}
}
Run Code Online (Sandbox Code Playgroud)
RedditPostRepository.kt
interface RedditPostRepository {
fun postsOfSubreddit(subReddit: String, pageSize: Int): Listing<RedditPost>
enum class Type {
IN_MEMORY_BY_ITEM,
IN_MEMORY_BY_PAGE,
DB
}
}
Run Code Online (Sandbox Code Playgroud)
在SubRedditViewModel.k观察Listing<RedditPost>从RedditPostRepository.kt通知给UI有关的状态和数据和UI相应地更新视图。要了解有关如何NetworkState从数据源传播 到 ViewModel 的更多信息,请查看PageKeyedSubredditDataSource.kt和SubRedditDataSourceFactory.kt
这里是链接到由@yigit的谷歌样品。
| 归档时间: |
|
| 查看次数: |
2424 次 |
| 最近记录: |