我想在垂直列表中显示水平列表。 如果最初我设置了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));
}
}
答案 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();
}