带有动态数据的嵌套Recyclerview

时间:2018-09-18 05:55:07

标签: android nestedrecyclerview

我想在垂直列表中显示水平列表。 如果最初我设置了data,则显示正常。但是我需要动态更新内部列表。但是更新时不会调用内部列表onBindViewHolder。

主适配器

  private RecyclerView recyclerColors; 

 public class MyViewHolder extends RecyclerView.ViewHolder {
    private FilterColorAdapter mFilterColorAdpater;

  public MyViewHolder(View view) {
        super(view);

   recyclerColors =  view.findViewById(R.id.recyclerColors);
        final LinearLayoutManager linearLayoutManagerVideos = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
        recyclerColors.setLayoutManager(linearLayoutManagerVideos);
        mFilterColorAdpater = new FilterColorAdapter(context);
        recyclerColors.setAdapter(mFilterColorAdpater);
        recyclerColors.setNestedScrollingEnabled(false);
    }
}

 @Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

  if(matched){
     holder.mFilterColorAdpater.setFilterColorList(movie.getFilterData());
            holder.mFilterColorAdpater.setRowIndex(position);
  }

我的内置适配器

public class FilterColorAdapter extends RecyclerView.Adapter<FilterColorAdapter.MyViewHolder> {

private List<String> listColors;
private Context mContext;
private int mRowIndex = -1;

public class MyViewHolder extends RecyclerView.ViewHolder {
    public ImageView imgCircle;

    public MyViewHolder(View view) {
        super(view);
        imgCircle = view.findViewById(R.id.imgCircle);
    }
}

public FilterColorAdapter(Context mContext) {
    this.mContext = mContext;
}

public void setFilterColorList(List<String> listColors) {
    this.listColors = listColors;
    notifyDataSetChanged();
}

@Override
public void onBindViewHolder(@NonNull MyViewHolder Rowholder, int position) {
    MyViewHolder holder = (MyViewHolder) Rowholder;
    Util.changeImageViewColor(holder.imgCircle, listColors.get(position));
}

 }

1 个答案:

答案 0 :(得分:0)

更改如下,将解决问题:

private RecyclerView recyclerColors; 

public class MyViewHolder extends RecyclerView.ViewHolder {

public MyViewHolder(View view) {
     super(view);

     recyclerColors =  view.findViewById(R.id.recyclerColors);
     final LinearLayoutManager linearLayoutManagerVideos = new LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false);
     recyclerColors.setLayoutManager(linearLayoutManagerVideos);
     recyclerColors.setNestedScrollingEnabled(false);
}

@Override
public void onBindViewHolder(MyViewHolder holder, final int position) {

    if(matched){
        FilterColorAdapter mFilterColorAdpater = new FilterColorAdapter(context);
        recyclerColors.setAdapter(mFilterColorAdpater);
        holder.mFilterColorAdpater.setFilterColorList(movie.getFilterData());
        holder.mFilterColorAdpater.setRowIndex(position);
    }
}
}

和:

public void setFilterColorList(List<String> listColors) {
    this.listColors.clear();
    this.listColors.addAll(listColors);
    notifyDataSetChanged();
}