0

我想在垂直列表中显示水平列表。如果最初我设置数据,它显示正常。但我需要动态更新内部列表。但是更新时不会调用内部列表 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));
}

 }
4

1 回答 1

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();
}
于 2018-09-18T06:07:50.357 回答