jetpack paging从使用到放弃,再到使用2

2020-11-18  本文已影响0人  黄小楼vincent

上一篇文章说的是简单使用的意思。
但是,你知道的。一般分页都会有请求中,请求失败,请求成功,最后一页等等。或者其他奇奇怪怪的需求。有多奇怪就看产品汪有多么不专业(狗头)。
这里就拿官方的例子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的设计多么优雅,给你回调足够多的事件。那你倒是用起来啊!

上一篇下一篇

猜你喜欢

热点阅读