【问题标题】:Nested Recyclerview with dynamic data具有动态数据的嵌套 Recyclerview
【发布时间】:2018-09-18 05:55:07
【问题描述】:

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

 }

【问题讨论】:

  • 代码看起来不错,检查你的条件是否在这个if(matched){ holder.mFilterColorAdpater.setFilterColorList(movie.getFilterData()); holder.mFilterColorAdpater.setRowIndex(position); }中匹配
  • 是的,条件匹配,因为 setFilterColorList 和 getItemCount 被调用但 onBindViewHolder 没有被调用。
  • 你找到解决办法了吗?
  • 我通过在布局中添加动态视图来做到这一点,另一种方式

标签: android nestedrecyclerview


【解决方案1】:

修改如下,问题就解决了:

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();
}

【讨论】:

  • 嗨,也这样做了,即使 getItemCount 没有被调用也不起作用
  • 嗨;好的,将适配器创建拉出视图持有者构造函数并将其放入 onBindViewHolder。由于丢失了对正确内部适配器的引用,回收机制会导致此问题。
  • 太好了!如果有帮助,请您标记答案吗?谢谢老兄:)
  • 它实际上不起作用,我通过向布局添加动态视图来做到这一点,另一种方式
猜你喜欢
  • 1970-01-01
  • 2019-09-18
  • 1970-01-01
  • 2019-02-09
  • 2021-12-02
  • 2021-07-25
  • 2015-12-08
  • 1970-01-01
  • 2020-10-29
相关资源
最近更新 更多