recyclerView列表使用Timer定时器复用错乱的问题

相信许多小哥哥,小姐姐都遇到过recycleview列表复用错乱的问题,尤其是l列表中用到Timer定时器的时候,更容易出问题。


看下图:(只截取了列表的部分)


分析列表错乱的原因:

每一个item都有一个距开赛时间的倒计时(这个是用Timer自定义的),当item滑出界面的时候,timer 还在执行,没有停止,然后下个item复用了上个item的view,

但是注意了,timer还在执行,因为复用,操作的是当前item 的view。 即出现了item的复用问题。


那如何解决呢?

当然是在item滑出屏幕的时候,把对应的timer给取消了即可。


看Recycleview.Adapter的源码,有一个方法onViewRecycled()


大概意思是,当视图被回收的时候调用。


所以我们只需要重写此方法,

从holder里面取出Timer。然后取消Timer,再把Timer置NULL(置NULL原因:快速滑动时,会产生大量Timer对象,为了内存优化,所以这里置NULL)。

其他的逻辑就好操作了。

@Override
    public void onViewRecycled(RecyclerView.ViewHolder holder) {
        super.onViewRecycled(holder);
        MyViewHolder mHolder = (MyViewHolder) holder;
        Timer timer = (Timer) mHolder.scoreMinute.getTag();
        if (timer != null) {
            timer.cancel();

    timer=null;
        }
    }



  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值