java.lang.ArrayIndexOutOfBoundsException:长度=27;索引=-1

Dus*_*vic 6 java android

当我在回收器视图中实现页脚时,出现此错误。

我就是这样做的。我使用两种类型在列表中显示不同的视图,但是方法中有些东西没有设置好getItemCount(),或者当我在列表中获取单击的项目模型的位置时。

这是我到目前为止所拥有的:

private final int VIEW_TYPE_ITEM = 0;
private final int VIEW_TYPE_FOOTER = 1;

@Override
public int getItemCount() {
    return mUsers == null ? 0 : mUsers.size() + 1;
}

@Override
public int getItemViewType(int position) {
    if (isFooterPosition(position)) {
        return VIEW_TYPE_FOOTER;
    }
    return VIEW_TYPE_ITEM;
}

private boolean isFooterPosition(int position) {
    return position == mUsers.size() + 1;
}

private User getUser (int position) {
    return mUsers.get(position - 1); // Here i'm getting an error mentioned in title
}
Run Code Online (Sandbox Code Playgroud)

编辑:

if (holder instanceof UserHolder) {
        final User user = getUser(position);
        UserHolder userViewHolder = (UserHolder) holder;

        userViewHolder.tvUserName.setText(user.getName());
        userViewHolder.mView.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                mOnItemClickListener.onItemClick(v, position);
            }
        });
    } else if (holder instanceof FooterViewHolder) {
        FooterViewHolder footerViewHolder = (FooterViewHolder) holder;
        Typeface typeface = Typeface.createFromAsset(mContext.getAssets(), "Lato-Thin.ttf");
        footerViewHolder.mButton.setTypeface(typeface);
    }
Run Code Online (Sandbox Code Playgroud)

我在列表中有一些用于普通持有人视图的项目,还有一个用于页脚视图的项目。

Nic*_*ker 3

mUsers.get(position - 1);当 为 0 时将会崩溃position,因为您正在查找-1无效索引处的项目。

如果您要添加页脚,该页脚将出现在所有前面的项目之后,那么您是否需要进行减法?

  • 位置 0 => 用户 0
  • 位置 1 => 用户 1
  • 位置 N => 用户 N
  • 位置 N + 1 => 页脚

最好还是回去吧mUsers.get(position)

编辑:还有一个小问题:

这里有一个问题:

private boolean isFooterPosition(int position) {
    return position == mUsers.size() + 1;
}
Run Code Online (Sandbox Code Playgroud)

mUsers.size()是 20,因此用户的位置为 0-19。 isFooterPosition对于 20(用户大小 + 1)应返回 true。但是,该结果将会返回false,因为页脚位于位置21

20因此,您有一个完全无效的点 ( )。

private boolean isFooterPosition(int position) {
    return position == mUsers.size();
}
Run Code Online (Sandbox Code Playgroud)