android RecyclerView局部刷新

项目中列表需要有点赞的功能,这时我们想到RecyclerView比listview的好处就是,recyclerview有单条item刷新的方法,于是就调用了RecyclerView的notifyItemChanged(int position)方法,结果发现刷新单个布局的时候图片闪烁,

   mRecycleViewAdapter.notifyItemChanged(position);

《android RecyclerView局部刷新》
这种效果肯定是不行的,于是查了下资料,发现需要调用RecyclerView的notifyItemChanged(int position, Object payload)的方法,这个payload需要传一个不为null的参数(参数值随便填,只要不为null就行),

  mRecycleViewAdapter.notifyItemChanged(position, "ivluowei");

调用这个方法我们需要重写adapter中的onBindViewHolder(RecyclerView.ViewHolder holder, int position, List payloads)方法:

 @Override
    public void onBindViewHolder(ViewHolder holder, int position, List<Object> payloads) {

        if (payloads.isEmpty()) {
            onBindViewHolder(holder, position);
        } else {
            ViewHolder viewHolder = holder;
            if (mInfoListData.get(position).getIsPraise().equals("y")) {//y:已点赞;n:未点赞
                viewHolder.mImageLike.setBackgroundResource(R.drawable.travel_like_click);
                viewHolder.mTvLike.setText(mInfoListData.get(position).getPraiseNum() + "");
            } else {
                viewHolder.mImageLike.setBackgroundResource(R.drawable.travel_like_unclick);
                viewHolder.mTvLike.setText(mInfoListData.get(position).getPraiseNum() + "");
            }
        }
    }

上面代码判断了payloads列表是否为空,如果为空就走正常的onBindViewHolder(ViewHolder holder, final int position)方法,如果不为空则走else里面的代码,else里面的代码只写你需要更新的控件即可(不需要更新的控件就不用写在里面了).

改好之后的效果图如下:

《android RecyclerView局部刷新》

    原文作者:ivluowei
    原文地址: https://blog.csdn.net/qq15357971925/article/details/78043332
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞