我真的不知道为什么我因为没有返回任何值而导致此方法出错。这是关于getItemViewType()
中的方法RecyclerView.Adapter
。我在里面检查一些情况。
@Override
@ViewType
public int getItemViewType(int position) {
if (!mResults.isEmpty()) {
if (position < mResults.size()) {
if (itemList.get(position) instanceof Categorizable) {
return TYPE_ITEM;
} else if (itemList.get(position) instanceof SectionHeader) {
return TYPE_SECTION_HEADER;
}
} else {
return FOOTER;
}
} else {
if (mFilterOption == Filter.COMPLETE ||
mFilterOption == Filter.INCOMPLETE) {
if (position == 0) {
return NO_ITEM;
} else {
return FOOTER;
}
} else {
if (itemList.get(position) instanceof Categorizable) {
return TYPE_ITEM;
} else {
return TYPE_SECTION_HEADER;
}
}
}
}
答案 0 :(得分:1)
我想我明白了,你的一个条件没有涵盖。查看第一个scope :in_range, -> {includes(:model_one).where('created_at <= ?', DateTime.now + (model_one: {:length_in_hours}).hours)}
,看看我添加if
的位置,如果它进入那里你错过了一个返回语句,但它不符合上述两个条件中的任何一个:
return 1;
当然,将if (!mResults.isEmpty()) {
if (position < mResults.size()) {
if (itemList.get(position) instanceof Categorizable) {
return TYPE_ITEM;
} else if (itemList.get(position) instanceof SectionHeader) {
return TYPE_SECTION_HEADER;
}
return 1; // adding this will fix it
} else {
return FOOTER;
}
} else {
if (mFilterOption == Filter.COMPLETE ||
mFilterOption == Filter.INCOMPLETE) {
if (position == 0) {
return NO_ITEM;
} else {
return FOOTER;
}
} else {
if (itemList.get(position) instanceof Categorizable) {
return TYPE_ITEM;
} else {
return TYPE_SECTION_HEADER;
}
}
}
替换为它应该返回的实际值。此外,当你有1
时,你实际上大部分时间都不需要return
。看一下这个例子:
else
并将其与此进行比较(只是为了得到这个想法):
if (a > b) return a;
else return b;
所以第二个可能更具可读性,并且它做同样的事情。如果if (a > b) return a;
return b;
条件已满足,则会返回if
。如果没有,则不需要a
,它已经过时了。也许在代码中删除一些else
可能会使其更清晰,更易读。