在recyclerview适配器中使用if条件的方法中缺少return语句

时间:2016-09-13 21:41:54

标签: android android-recyclerview

我真的不知道为什么我因为没有返回任何值而导致此方法出错。这是关于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;
            }
        }
    }
}

1 个答案:

答案 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可能会使其更清晰,更易读。