仅当getItemCount返回大于数组大小的1时才调用OnBindView

时间:2016-10-21 10:58:16

标签: android android-studio android-adapter

我遇到了一个奇怪的错误,如果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一样是个问题,数组通常都是。

2 个答案:

答案 0 :(得分:1)

我建议请看一下如何将数据添加到列表中。你可能会对arraylist做错事。但是在getItemCount()方法中,条件应该是这样的。 它永远不会崩溃。那可能会有所帮助。

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

答案 1 :(得分:1)

getItemCount()告诉Adapter要显示多少行。如果List的大小为零,则表示RecyclerView中没有要显示的行。

现在,当您添加一个条目(您在Constructor中执行此操作)时,list的大小会更改为一个条目。然后Adapter调用getItemCount(),返回list(现在为1)的大小,并相应地填充Adapter