android - 在 recyclerview 适配器中带有 if 条件的方法中缺少 return 语句

标签 android android-recyclerview

我真的不知道为什么我会在这个方法中遇到没有返回任何值的错误。这是关于 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/

相关文章:

java - android旋转后如何保留我的RecyclerView?

android - 可以在 Android 应用内购买创建注册成员(member)并在月底收取费用

java - 在后台更新位置并检查 LocationSettings

android - 方法 setTitle 的工具栏错误

android - 评估 gomobile 绑定(bind)中的 nil 值

java - 使用单击 Spinner Item 刷新 ArrayList 以将新数据显示到 RecyclerView 中

java - 如何在 recyclerview 可见时播放视频并在其不可见时立即暂停(滚动)

Android Facebook 应用程序与 GAE 的集成

android.support.v7.widget.RecyclerView.onMeasure 的 java.lang.NullPointerException

android - RecyclerView 在 Activity 首次启动时不会加载项目