RecyclerView 局部刷新 item 闪动问题解决

列表页面的刷新经常会尝试去对某一个position的item做刷新处理,这时如果调用adapter的notifyItemChanged(int position)的方法,对应positon的item会闪动一下,体验不友好。经多番网上查阅资料后找到了比较可靠的解决方案。
局部刷新调用adapter的notifyItemChanged(int position, Object payload)的方法。然后对应的adapter 重写onBindViewHolder(RecyclerView.ViewHolder holder, int position, List payloads)。
#以下为示例代码:

1.adapter代码

public void onBindViewHolder(RecyclerView.ViewHolder holder, int position, List<Object> payloads){
    if (payloads.isEmpty()) {
        onBindViewHolder(holder, position);
    } else {
        onBindItemHolder(holder, position);
    }
}

private void onBindItemHolder(RecyclerView.ViewHolder holder, int position) {
    int viewType = getItemViewType(position);
    if (viewType == 0) {
        ((IndividualInfoViewHolder) holder).bindSomeData(mFunctionEntities.get(position));
    }
}

2.ViewHolder(IndividualInfoViewHolder)代码

public void bindSomeData(MineFunctionEntity dataModel) {
    RoundedImageView rivAvatar = itemView.findViewById(R.id.riv_avatar);
    String imgurl = dataModel.getExtra();
    if (!TextUtils.isEmpty(imgurl) && !imgurl.contains("http")) {
        imgurl = Constant.IMG_HOST + imgurl;
    }
    GlideUtils.loadImageAsBitmap2(mContext, imgurl, rivAvatar);
    TextView tvNickName = itemView.findViewById(R.id.tv_nickname);
    tvNickName.setText(dataModel.getName());
}

如此便可以解决__局部刷新item闪动__的问题,同时可以有选择地更新item中某一个控件的内容。
出现该问题并不是有些开发者提到的诸如“recyclerView刷新时自带动画”、“图片库默认加载图片的动画”等等问题。
参考文章:
https://wetest.qq.com/lab/view/176.html?from=adsout_qqtips_past2&sessionUserType=BFT.PARAMS.201129.TASKID&ADUIN=1217543868&ADSESSION=1477044282&ADTAG=CLIENT.QQ.5503_.0&ADPUBNO=26638

猜你喜欢

转载自blog.csdn.net/xiayuexingkong/article/details/87803866