私は、セクションとサブヘッダでrecyclerviewを実装しようとしています。私はGithubのGabriele Mariottiによって素晴らしいクラスを見つけましたが、私はそれを実装するいくつかの問題を抱えています。基本的には、私の定期的なrecyclerviewアダプタを例の代わりに使用すると、各セクションヘッダーが私のrecyclerviewの1つの要素を置き換えます。sectioned recyclerview
たとえば、私はrecyclerviewの中に5枚のカード(調理アプリとして5つの成分)を持っていますが、2枚のヘッダーを追加した後、1枚目と4枚目をサブヘッダーに置き換えた3枚のカードが残っています。私はこれが理にかなってほしい。また、私のカードの位置がすべて乱れていると、私はrecyclerviewの底にスクロールすると、アプリケーションがクラッシュします。うまくいけば誰かが私を正しい方向に向けることができるように、私はいくつかのコード行を付けています。 Mariottiの例と比較すると、私は基本的にだけではなく、「simpleadapter.java」クラスの自分のアダプターを使用しています:
public class RecyclerViewAdapter extends RecyclerView.Adapter<RecyclerViewAdapter.RecyclerViewHolders> {
private List<Ingredient> itemList;
private final String TAG = OrderFragment.class.getSimpleName();
private Context context;
public RecyclerViewAdapter(Context context, List<Ingredient> itemList) {
this.itemList = itemList;
this.context = context;
}
public class RecyclerViewHolders extends RecyclerView.ViewHolder{
public RecyclerViewHolders(View itemView) {
super(itemView);
}
}
public class ingredientViewHolder extends RecyclerViewHolders{
public TextView ingredientName;
public ImageView ingredientPhoto;
public ImageButton infoBtn;
public Button regularBtn;
public Button extraBtn;
public ImageView soldOutPhoto;
public ImageView grayOutPhoto;
private Context context;
public ingredientViewHolder(View itemView) {
super(itemView);
ingredientName = (TextView)itemView.findViewById(R.id.ingredient_name);
ingredientPhoto = (ImageView)itemView.findViewById(R.id.ingredient_photo);
infoBtn = (ImageButton) itemView.findViewById(R.id.info);
regularBtn = (Button) itemView.findViewById(R.id.regular);
extraBtn = (Button) itemView.findViewById(R.id.extra);
soldOutPhoto = (ImageView) itemView.findViewById(R.id.sold_out);
grayOutPhoto = (ImageView) itemView.findViewById(R.id.gray_out);
}
}
@Override
public RecyclerViewHolders onCreateViewHolder(ViewGroup parent, int viewType) {
View layoutView = LayoutInflater.from(parent.getContext()).inflate(R.layout.ingredient, null);
return new ingredientViewHolder(fragment, layoutView);
}
@Override
public void onBindViewHolder(RecyclerViewHolders viewHolder, final int pos) {
ingredientViewHolder holder = (ingredientViewHolder) viewHolder;
final int position = holder.getAdapterPosition();
final String name = itemList.get(position).getName();
if (MainActivity.order.get(position) == 1) {
holder.regularBtn.setSelected(true);
holder.extraBtn.setSelected(false);
} else if (MainActivity.order.get(position) == 2) {
holder.regularBtn.setSelected(false);
holder.extraBtn.setSelected(true);
} else {
holder.regularBtn.setSelected(false);
holder.extraBtn.setSelected(false);
}
holder.ingredientName.setText(itemList.get(position).getName());
}
@Override
public int getItemCount() {
return this.itemList.size();
}
}
そして、ここでは、私は私のフラグメント内でこのrecyclerviewを呼び出しています方法です:
final RecyclerView rView = (RecyclerView) v.findViewById(R.id.recycler_view);
rView.setHasFixedSize(true);
rView.setLayoutManager(new GridLayoutManager(getActivity(), 3));
//Your RecyclerView.Adapter
RecyclerView.Adapter rcAdapter = new RecyclerViewAdapter(getActivity(), visibleIngredients);
//This is the code to provide a sectioned grid
List<SectionedGridRecyclerViewAdapter.Section> sections =
new ArrayList<SectionedGridRecyclerViewAdapter.Section>();
//Sections
sections.add(new SectionedGridRecyclerViewAdapter.Section(0,"Spreads"));
sections.add(new SectionedGridRecyclerViewAdapter.Section(2,"Liquid"));
//Add your adapter to the sectionAdapter
SectionedGridRecyclerViewAdapter.Section[] dummy = new SectionedGridRecyclerViewAdapter.Section[sections.size()];
SectionedGridRecyclerViewAdapter mSectionedAdapter = new
SectionedGridRecyclerViewAdapter(getActivity(),R.layout.section,R.id.section_text,rView,rcAdapter);
mSectionedAdapter.setSections(sections.toArray(dummy));
//Apply this adapter to the RecyclerView
rView.setAdapter(mSectionedAdapter);
スタックトレースを送信 – fractalwrench