美文网首页
RecyclerView局部刷新

RecyclerView局部刷新

作者: 逐鹿不顾兔208 | 来源:发表于2018-11-23 10:01 被阅读0次

要求:一系列的item,然后只需要刷新其中的两个item,其他的不变化,保持原状。

  • 设置每个图片的tag,然后刷新的时候,对比每个tag的值,相等的话就不用重新刷新
  • Glide那些控件的原因,重新加载后,造成图片刷新。

后面解决的办法:RecyclerView做局部刷新还是非常容易的,其实就是使用好带payload参数的这个notifyItemChanged方法,以及重写带payload的这个onBindViewHolder方法,在onBindViewHolder中去刷新你想更新的控件即可。
其中onBindViewHolder,有两个,可以通过payloads是否为空,来进行刷新。源码:

    /* @param holder The ViewHolder which should be updated to represent the contents of the
         *               item at the given position in the data set.
         * @param position The position of the item within the adapter's data set.
         * @param payloads A non-null list of merged payloads. Can be empty list if requires full
         *                 update.
         */
        public void onBindViewHolder(VH holder, int position, List<Object> payloads) {
            onBindViewHolder(holder, position);
        }

主要看其中的注释payloads A non-null list of merged payloads. Can be empty list if requires full * update.

下面的是我的代码,可以通过notifyItemChanged(lastSlectCount,"abc");notifyItemChanged(position);, 前面的是刷新原item,后面的是刷新目标item。

  @Override
    public void onBindViewHolder(ViewHolder holder, int position, List<Object> payloads) {
        if (payloads.isEmpty()) {
            onBindViewHolder(holder, position);
        } else {
            if (lastSlectCount != selectCount && lastSlectCount == position) {
                holder.tvCount.setActivated(false);
                holder.ivSelect.setVisibility(View.GONE);
            }
        }
    }
 @Override
    public void onBindViewHolder(ViewHolder holder, int position) {
 // todo
}

相关文章

网友评论

      本文标题:RecyclerView局部刷新

      本文链接:https://www.haomeiwen.com/subject/upidqqtx.html