getItemCount
が1(データ構造のサイズ)を返す場合、アダプターによってカードが表示されない不思議なバグが発生しました。OnBindViewは、getItemCountが配列のサイズよりも1を返したときにのみ呼び出されます。
マイアダプターコード -
public class SingleAdapter extends RecyclerView.Adapter<SingleAdapter.ViewHolder> {
private ArrayList<String> names = new ArrayList<String>();
public SingleAdapter() {
names.add("Rajma Chawal"); //Just for testing purposes
}
public static class ViewHolder extends RecyclerView.ViewHolder {
private CardView cardView;
public ViewHolder(CardView v) {
super(v);
cardView=v;
}
}
@Override
public SingleAdapter.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
CardView cv = (CardView) LayoutInflater.from(parent.getContext())
.inflate(R.layout.card_order, parent, false);
return new ViewHolder(cv);
}
public void onBindViewHolder(ViewHolder holder, final int position) {
CardView cardView = holder.cardView;
TextView textView = (TextView) cardView.findViewById(R.id.info_name);
textView.setText(names.get(position));
}
public int getItemCount() {
return names.size();
// return 2; Generates a card if I do this
//and put a constant in place of Textview.setText("kk"); like this.
// Otherwise occurs in an outofbounds exception
}
それはそうでなければカードが生成されないよう、数に1を持っている私を必要とする理由を私は知りません。私は初心者ですので、この質問があまりにも些細なものであれば申し訳ありません。
編集:配列でチェックしたところ、Arraylistsのような問題があるように見えますが、配列は通常通りです。
私はあなたのコードを試して、それは正常に働いた。 – MohanadMohie
私は 'return 2;'部分に気付かなかった。リストのサイズが1のときは2を返すことはできません。データを渡している間に、コンストラクタの 'ArrayList'に余分な項目を追加します。 – MohanadMohie
@MohanadMohie @Rajatが言っていることは、itemcountよりもアイテムが少なくなっているということです。 – Abbas