如何让 recyclerview 实现无感的上拉下拉刷新,向微信聊天记录那样? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
chillwind
V2EX    Android

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

  •  
  •   chillwind 2020-07-18 16:21:30 +08:00 13297 次点击
    这是一个创建于 1914 天前的主题,其中的信息可能已经有所发展或是发生改变。
    基于 Paging 做了一版,效果基本能用,但是只依赖网络数据没有本地库,做动态删除就不行了。用传统的 RecyclerView.OnScrollListener 来做,底部的上拉刷新没问题,通过比较 findLastVisibleItemPosition 和当前 list 的大小很容易实现。但是做下拉刷新是就不太好做了,使用 SwipeRefreshLayout 能实现功能,但是体验很不好,没办法做到无。感觉在 OnScrollListener onScrolled 里判断,但是没找到合适的判断条件。大家有什么好方案吗?
    10 条回复    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
    @DweyReed 今天试了一下 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 吧。
    FringJX
        9
    FringJX  
       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
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     934 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 19:54 PVG 03:54 LAX 12:54 JFK 15:54
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86