Andorid RecyclerView 局部刷新--倒计时

 

 

前面我们介绍RecyclerView局部刷新功能实现,我们可以利用局部刷新功能实现倒计时功能。

倒计时其实就是每个1秒去刷新TextView,实现时间变化,然而在RecyclerView itemView 复杂时候,我们全局刷新,往往会造成性能损耗,所以我们采用局部,只刷新TextView 一个控件来实现倒计时功能

1、handler + recyclerView 来实现列表倒计时

handler用来延迟一秒实现倒计时效果,通知RecyclerView刷新单个条目TextView时间

  handler = new Handler(getMainLooper()) {
            @Override
            public void handleMessage(@NonNull Message msg) {
                super.handleMessage(msg);
                //固定条目刷新
                CountDownBean countDownBean = countDownBeans.get(0);
                countDownBean.setCountDown(countDownBean.getCountDown() - 1);
                recyclerRefreshAdapter.notifyItemChanged(0, 1);

                CountDownBean countDownBean1 = countDownBeans.get(1);
                countDownBean1.setCountDown(countDownBean1.getCountDown() - 1);
                recyclerRefreshAdapter.notifyItemChanged(1, 1);


                CountDownBean countDownBean2 = countDownBeans.get(2);
                countDownBean2.setCountDown(countDownBean2.getCountDown() - 1);
                recyclerRefreshAdapter.notifyItemChanged(2, 1);


                CountDownBean countDownBean3 = countDownBeans.get(3);
                countDownBean3.setCountDown(countDownBean3.getCountDown() - 1);
                recyclerRefreshAdapter.notifyItemChanged(3, 1);


                CountDownBean countDownBean4 = countDownBeans.get(4);
                countDownBean4.setCountDown(countDownBean4.getCountDown() - 1);
                recyclerRefreshAdapter.notifyItemChanged(4, 1);


                handler.sendEmptyMessageDelayed(1, 1000);

                //不固定刷新
                //获取第一条和最后一条显示position
                int firstPosition = linearLayoutManager.findFirstVisibleItemPosition();
                int lastPosition = linearLayoutManager.findLastVisibleItemPosition();
                int countDownItemPosition = 5;
                if (countDownItemPosition >= firstPosition && countDownItemPosition <= lastPosition) {
                    CountDownBean countDownBean5 = countDownBeans.get(countDownItemPosition);
                    countDownBean5.setCountDown(countDownBean5.getCountDown() - 1);
                    recyclerRefreshAdapter.notifyItemChanged(5, 1);
                }

            }
        };

2、重写onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List payloads)方法

  @Override
        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder viewHolder, int position) {
            RecyclerRefreshViewHolder myViewHolder = (RecyclerRefreshViewHolder) viewHolder;
            myViewHolder.textView.setText("position:" + position + "--" + countDownBeans.get(position).getCountDown() + "秒");
        }

        @Override
        public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List payloads) {
            if (payloads.size() == 0) {
                //全局刷新
                onBindViewHolder(holder, position);
            } else {
                //倒计时刷新
                RecyclerRefreshViewHolder myViewHolder = (RecyclerRefreshViewHolder) holder;
                myViewHolder.textView.setText("position:" + position + "--" + countDownBeans.get(position).getCountDown() + "秒(倒计时)");
            }
        }

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值