我遇到了一个奇怪的错误,如果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 :(得分: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
。