Android 列表(ListView、RecyclerView)不断刷新最佳实践

本文探讨在Android中ListView和RecyclerView中实现列表项倒计时刷新时遇到的问题及解决方案。通过handler、Timer、Timer+View集合、ScheduledExecutorService+View集合四种方式,分析其优劣,最终推荐使用ScheduledExecutorService结合View集合的方法,避免组件复用导致的刷新错乱。
摘要由CSDN通过智能技术生成

本文微信公众号「AndroidTraveler」首发。

背景

在 Android 列表开发过程中,有时候我们的 Item 会有一些组件,比如倒计时。这类组件要求不断刷新,这个时候由于列表复用的机制,因此会有一些坑。那么我们本篇文章就给大家讲两个主题。

第一个是列表复用是否一定有问题。
第二个是出现问题有哪些解决方案可供我们选择。

小 Demo

由于我们的主题重点是为了解决不断刷新问题,因此关于 RecyclerView 的基本使用就不再赘述,不清楚的小伙伴可以看下我之前的文章:
RecyclerView基本使用

首先我们看下效果图:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-dMnF5PjN-1571660215807)(https://user-gold-cdn.xitu.io/2019/9/24/16d627e82dca92c0?w=449&h=793&f=gif&s=131127)]

很简单,就是一个 RecyclerView 列表,列表项有两个组件。分别代表第几项和剩余秒数。

这里就是通过倒计时来演示刷新可能存在的问题。

重点代码是 Adapter 里面的显示逻辑,初始为:

@Override
public void onBindViewHolder(RecyclerViewViewHolder holder, int position) {
   
    holder.mTvNum.setText(String.valueOf(position + 1));
    updateTime(holder, itemList.get(position));
}

private void updateTime(final RecyclerViewViewHolder holder, final long time) {
   
    String content;
    long remainTime = time - System.currentTimeMillis();
    remainTime /= 1000;
    if (remainTime <= 0) {
   
        content = "Time up";
        holder.mTxtTitle.setText(content);
        return;
    }

    content = "剩下"+remainTime+"秒";
    holder.mTxtTitle.setText(content);
}

全部代码见:https://github.com/nesger/RecyclerView/tree/feature/refresh

接下来我们增加刷新方法,有很多种,我们一一说明。

1. 使用 handler 来实现倒计时刷新

修改显示代码,如下:

@Override
public void onBindViewHolder(RecyclerViewViewHolder holder, int position) {
   
    holder.mTvNum.setText(String.valueOf(position + 1));
    updateTime(holder, itemList.get
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值