V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
chillwind
V2EX  ›  Android

如何让 recyclerview 实现无感的上拉下拉刷新,向微信聊天记录那样?

  •  
  •   chillwind · 2020-07-18 16:21:30 +08:00 · 10319 views
    This topic created in 1597 days ago, the information mentioned may be changed or developed.
    基于 Paging 做了一版,效果基本能用,但是只依赖网络数据没有本地库,做动态删除就不行了。用传统的 RecyclerView.OnScrollListener 来做,底部的上拉刷新没问题,通过比较 findLastVisibleItemPosition 和当前 list 的大小很容易实现。但是做下拉刷新是就不太好做了,使用 SwipeRefreshLayout 能实现功能,但是体验很不好,没办法做到无感。感觉在 OnScrollListener onScrolled 里判断,但是没找到合适的判断条件。大家有什么好方案吗?
    10 replies    2020-07-25 11:04:13 +08:00
    paradoxs
        1
    paradoxs  
       2020-07-18 16:34:05 +08:00
    微信那个是辣鸡方案,就是普通的提前加载,半屏了就去加载。。 只要你拖动快一点,就会有“加载感”了。

    telegram 的加载方案才是无感的。
    wnpllrzodiac
        2
    wnpllrzodiac  
       2020-07-18 16:51:00 +08:00 via Android
    怎么做到无感?带宽无限?拉的快一定会没数据啊
    CSM
        3
    CSM  
       2020-07-18 16:56:43 +08:00 via Android
    微信的好用吗。。Telegram 的才是无感吧
    DeweyReed
        4
    DeweyReed  
       2020-07-18 18:32:27 +08:00
    Paging 搭配 Room,要动态删除你直接删 Room 里的数据就可以。不想存到本地数据库里,可以用 Room 的 inMemoryDatabase 。
    chillwind
        5
    chillwind  
    OP
       2020-07-18 19:08:27 +08:00
    @DeweyReed 用 paging 刷新时也会卡一下的,感觉是靠 SCROLL_STATE_IDLE 触发的加载数据,没有 onScrolled 里做的加载顺滑
    DeweyReed
        6
    DeweyReed  
       2020-07-18 21:08:04 +08:00
    @chillwind 可以用 paging 的 placeholder 、增加 page size 、限制 RecyclerView 的最大滑动速度。Paging 是通过 adapter 操作的,不直接和 RecyclerView 通信。
    chillwind
        7
    chillwind  
    OP
       2020-07-19 21:41:50 +08:00
    @DeweyReed 今天试了一下 paging + room,通过 onZeroItemsLoaded 初始化数据,onItemAtEndLoaded 拉取后面的数据,测试基本功能可用,但是 onItemAtFrontLoaded 数据会有问题,onItemAtFrontLoaded 开始就会执行,而且 RecyclerView 定位到 onItemAtFrontLoaded 的第一条数据,而不是 onZeroItemsLoaded 的第一条数据。不知道是不是我对 PagedList.BoundaryCallback 理解不对,还是有别的方法?
    DeweyReed
        8
    DeweyReed  
       2020-07-19 22:12:20 +08:00
    @chillwind 可以考虑不用 onItemAtFrontLoaded,只用 onZeroItemsLoaded 和 onItemAtEndLoaded,自己管理第几页。可以参考官方 demo 。
    说实话 Paging 的 API 其实挺怪的。。期待 Paging3 吧。
    hfl1995
        9
    hfl1995  
       2020-07-22 10:13:57 +08:00
    没办法做到完全无感,telegram 也能看到 loading,除非修改滑动的速率
    fromzero
        10
    fromzero  
       2020-07-25 11:04:13 +08:00
    加一个 loadingView 的 itemType, 然后在 onBindViewHolder 的时候调用加载更多数据。然后移除 这个 loadingView
    About   ·   Help   ·   Blog   ·   API   ·   FAQ   ·   Tools   ·   6067 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 21ms · UTC 03:24 · PVG 11:24 · LAX 19:24 · JFK 22:24
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.