当我在回收器视图中实现页脚时,出现此错误。
我就是这样做的。我使用两种类型在列表中显示不同的视图,但是方法中有些东西没有设置好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)
我在列表中有一些用于普通持有人视图的项目,还有一个用于页脚视图的项目。
mUsers.get(position - 1);当 为 0 时将会崩溃position,因为您正在查找-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)
| 归档时间: |
|
| 查看次数: |
21149 次 |
| 最近记录: |