上一篇文章说的是简单使用的意思。
但是,你知道的。一般分页都会有请求中,请求失败,请求成功,最后一页等等。或者其他奇奇怪怪的需求。有多奇怪就看产品汪有多么不专业(狗头)。
这里就拿官方的例子pagingwithnetwork来说吧。但是!官方的例子是有坑的。
adapter.loadStateFlow.collectLatest { loadStates ->
swipe_refresh.isRefreshing = loadStates.refresh is LoadState.Loading
}
订阅适配器的状态改变数据流。这里是用官方的下拉刷新控件。如果我们需要,可以改成我们自己的弹出框之类的。比如swipe_refresh.isRefreshing = loadStates.refresh is LoadState.Loading改成 showDialog("加载中")
当然,因为是携程代码。你需要加到 lifecycleScope.launchWhenCreated
1.添加一个页脚footer
由于之前的adapter继承了PagingDataAdapter。所以会有adapter.withLoadStateFooter,
参数接收一个继承LoadStateAdapter的对象。
所以,我们 的状态栏就可以写在footerAdapter里面。
recyclerView.adapter = adapter.withLoadStateFooter(footerAdapter);
此时,官方的例子应该就结束了。
但是你运行了以后,会发现发生错误时,根本没有任何的底部状态栏出现。
这让我仔细检查了好一段时间代码。
你知道的,官方的例子想要运行起来,环境就很麻烦。
所以,又花费了一些功夫去运行官方例子。
结果发现官方的例子也是一样的~
其实,在官方关于paging的介绍中,就有介绍的。
我们需要的就是添加监听器addLoadStateListener
然后在里面添加处理操作。最简单的需求。
我需要在发生错误时重试按钮会出现。
那么我们可以~
adapter.addLoadStateListener { it ->
when (it.refresh) {
is LoadState.Error -> {
footerAdapter.loadState = LoadState.Error(Exception("aaaa"));
}
}
}
其他的,就按照状态进行各自的需求进行处理就行。
完!
总的还说,比2.0版本的好太多。
看到网上吹嘘2.0的设计多么优雅,给你回调足够多的事件。那你倒是用起来啊!
网友评论