前言

为什么要使用recyclerView的局部刷新功能,例如我们的列表有语音和视频正在播放,如果这时候需要刷新这个item上的某一个控件的数据,如果直接notifyItemChanged(position)就会直接导致视频或音频停止播放,所以我们有的时候会用到这个局部刷新功能。不废话直接上代码。

局部刷新 payloads

  1. 重写onBindViewHolder方法

    1
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List payloads) {}
  2. 根据payloads来刷新自己需要刷新的控件

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    public void onBindViewHolder(@NonNull RecyclerView.ViewHolder holder, int position, @NonNull List payloads){

    if (payloads.size() == 0 && payloads.isEmpty()) {
    Log.e("120", "非局部刷新" + payloads);
    onBindViewHolder(holder, position);
    } else {
    Log.e("120", "局部刷新" + payloads);
    int payload;
    try {
    payload = (int) payloads.get(0);
    } catch (Exception e) {
    return;
    }
    if (payload == 1) {
    Holder.setText(“123”);//需要单独刷新的控件
    }
    }
  3. 调用方式:

    1
    notifyItemChanged(positionIntent,1)