我真的不知道为什么我会在这个方法中遇到没有返回任何值的错误。这是关于 RecyclerView.Adapter
中的方法 getItemViewType()
。我正在检查里面的一些情况。
@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;
}
}
}
}
最佳答案
我想我明白了,您的其中一项条件未涵盖。查看第一个 if
,并查看我添加 return 1;
的位置,您缺少 return 语句,以防它进入那里但不满足上述任何 2条件:
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
,它已经过时了。也许在您的代码中删除一些 else
可以使其更清晰和可读。
关于android - 在 recyclerview 适配器中带有 if 条件的方法中缺少 return 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39479439/