2016-10-21 7 views
1

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のような問題があるように見えますが、配列は通常通りです。

+0

私はあなたのコードを試して、それは正常に働いた。 – MohanadMohie

+0

私は 'return 2;'部分に気付かなかった。リストのサイズが1のときは2を返すことはできません。データを渡している間に、コンストラクタの 'ArrayList'に余分な項目を追加します。 – MohanadMohie

+0

@MohanadMohie @Rajatが言っていることは、itemcountよりもアイテムが少なくなっているということです。 – Abbas

答えて

1

リストにどのようにデータを追加しているかを見てみましょう。 arraylistに何か悪いことをしているかもしれません。しかし、getItemCount()のメソッドの条件はそのようにする必要があります。 もうクラッシュすることはありません。それは役に立つかもしれません。

@Override 
public int getItemCount() { 
    return _cursor == null ? 0 : _cursor.sortedKeys().size(); 
} 
+0

私は項目数を渡す方法には問題はないと思うが、データ構造に問題がある可能性がある。なぜなら、配列と同様のコードが動作するため、 。 –

1

getItemCount()はどのように多くの行が表示されることをAdapter伝えます。 Listのサイズが0の場合は、RecyclerViewに表示する行がないことを意味します。

これで、listのサイズが1に変わります(Constructorで行っている)エントリを追加しました。 AdaptergetItemCount()を呼び出し、list(現在は1)のサイズを返し、それに応じてAdapterを設定します。

+0

それは起こっていないことです。サイズ1のリストについては、カードを表示するために2を返すなどしています。 –

+0

私はこの奇妙な行動についてはわかりません。その場合は次のものを使用することができます: 'return name.size()+ 1; ' –

+0

私はそれを使うことができます。しかし、それは境界の例外のaoutを提供します。私は再びonBindViewメソッドでその位置を確認する必要があります。そしてそれは全く一貫していません。時々動作し、他の時は何もしません。私はそれがArrayListsの問題だと思う、私はしようとし、配列が良いかどうかを見てみましょう。 –

関連する問題