美文网首页
jetpack paging从使用到放弃,再到使用2

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

作者: 黄小楼vincent | 来源:发表于2020-11-18 09:35 被阅读0次

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

    相关文章

      网友评论

          本文标题:jetpack paging从使用到放弃,再到使用2

          本文链接:https://www.haomeiwen.com/subject/rzmqiktx.html