2017-12-30 46 views
0

スクリーンショットでわかるように、私のプロジェクトにはRecyclerView(成分用)が含まれていますRecyclerView(食品のカテゴリ)が含まれています。しかし、iv'eは問題を持って、私のRecyclerViewは命令を台無しにしています。プロジェクトをデバッグしたところ、パラメータはうまくいきましたが、RecyclerViewは間違って表示されています。あなたが写真で見ることができるように、Fruits成分はDairyカテゴリに表示されます。スクロール時にRecyclerViewが台無しになりました

image which display the problem of the RecyclerView messed up

IngredientSectionAdapter.Java (もっとRecyclerView Sが含まれている主なアダプタ、)

class SectionViewHolder extends RecyclerView.ViewHolder { 
    private TextView sectionBtn; 
    private RecyclerView itemRecyclerView; 

    public SectionViewHolder(View itemView) { 
     super(itemView); 
     sectionBtn = (TextView) itemView.findViewById(R.id.text_category); 
     itemRecyclerView = (RecyclerView) itemView.findViewById(R.id.ingredientsRecycler); 
    } 
} 

private Context context; 
private ArrayList<IngredientSectionModel> sectionModelArrayList; 
ArrayList<IngredientItemAdapter> adapters; 

public IngredientSectionAdapter(Context context, ArrayList<IngredientSectionModel> sectionModelArrayList) { 
    this.context = context; 
    this.sectionModelArrayList = sectionModelArrayList; 
    adapters = new ArrayList<IngredientItemAdapter>(); 
} 

@Override 
public SectionViewHolder onCreateViewHolder(ViewGroup parent, int viewType) { 
    LayoutInflater inflater = LayoutInflater.from(context); 
    View v = inflater.inflate(R.layout.parent_list,null); 
    return new SectionViewHolder(v); 
} 

@Override 
public void onBindViewHolder(SectionViewHolder holder, int position) { 
    final IngredientSectionModel sectionModel = sectionModelArrayList.get(position); 
    holder.itemRecyclerView.setTag(holder.itemRecyclerView.getVisibility()); 
    final RecyclerView sectionList = holder.itemRecyclerView; 
    holder.sectionBtn.setText(sectionModel.getSectionLabel()); 

    //recycler view for items 
    holder.itemRecyclerView.setHasFixedSize(true); 
    holder.itemRecyclerView.setNestedScrollingEnabled(false); 

    /* set layout manager on basis of recyclerview enum type */ 

    StaggeredGridLayoutManager staggeredGridLayoutManager = new StaggeredGridLayoutManager(3,1); 
    adapters.add(new IngredientItemAdapter(context, sectionModel.getItemArrayList())); 
    int resId = R.anim.grid_layout_animation_from_bottom; 
    //LayoutAnimationController animation = AnimationUtils.loadLayoutAnimation(context, resId); 
    holder.itemRecyclerView.setLayoutManager(staggeredGridLayoutManager); 
    holder.itemRecyclerView.setAdapter(adapters.get(position)); 
    //holder.itemRecyclerView.setLayoutAnimation(animation); 

    //toggle visibilty of inner RecyclerView (ingredients, not categories) 
    holder.sectionBtn.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      if (sectionList.getVisibility() == View.VISIBLE){ 
       sectionList.setVisibility(View.GONE); 
      } 
      else 
      { 
       sectionList.setVisibility(View.VISIBLE); 
      } 
     } 
    }); 

} 

これを引き起こす可能性がありますか?

+0

リストが最初に表示されるとき、または上下にスクロールするときに問題がありますか? – elmorabea

+0

'getItemId()'と 'getItemViewType()'を使ってみてください。これらの機能は、** RecyclerView **の注文とポジションに関する多くの問題を解決します –

答えて

1

たびonBindViewHolderは、新しいIngredientItemAdapterを作成し、adaptersに追加すると呼ばれ、その後、あなたはholder.itemRecyclerView.setAdapter(adapters.get(position))を呼び出します。ただし、adapters.get(position)は作成したアダプタではありません。あなたのアダプターは大きくなります。試してみてください

IngredientItemAdapter adapter = adapters.get(position); 
adapter.setIngredients(sectionModel.getItemArrayList()); 
holder.itemRecyclerView.setAdapter(adapter); 
関連する問題