在我的RecyclerView中我有3种不同的自定义布局,一种是头版的标题视图,必须在位置0膨胀。第二种视图适用于必须从位置1 onwords膨胀的普通故事。第三个是打破故事的特殊布局,也应该在0以外的位置充气。
我设法在recyclelerView的onBindViewHolder()
方法中执行此操作:
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
if (holder instanceof ViewHolderHeaderMain) {
ViewHolderHeaderMain viewHolderHeaderMain = (ViewHolderHeaderMain) holder;
viewHolderHeaderMain.getMainHeaderView().setTopStories(this.mTopStory);
} else if (holder instanceof ViewHolderBaisc){
ViewHolderBaisc viewHolderItem = (ViewHolderBaisc) holder;
viewHolderItem.bindStory(this.mStories.get(position -1));
} else if (holder instanceof ViewHolderNew){
ViewHolderNew viewHolderNew = (ViewHolderNew) holder;
viewHolderNew.bindStory(this.mStories.get(position));
}
}
然后返回视图类型,如:
public int getItemViewType(int position) {
if (position != 0) {
if (mStories.get(position).getIsBreaking() ){
return ITEM_VIEW_TYPE_CUSTOM;
}
return mStories.get(position) != null ? ITEM_VIEW_TYPE_BASIC : ITEM_VIEW_TYPE_FOOTER;
}
return 0;
}
我的问题是,ITEM_VIEW_TYPE_BASIC
视图的最后一项未显示
以下是我的getItemCount方法
public int getItemCount() {
return (this.mStories != null) ? this.mStories.size() : 0;
}
如果我做return (this.mStories != null) ? this.mStories.size()+1: 0;
我得到
IndexOutOfBoundsException:索引10无效,大小为10
答案 0 :(得分:0)
在你的getItemViewType中,你有
return mStories.get(position)
并且在你正在进行的获取计数
return (this.mStories != null) ? this.mStories.size() : 0;
所以你想要返回this.mStories.size()+ 1,然后在你的getItemViewType中你要确保位置小于数组的大小。如果position是> = size,那么你返回FOOTER等希望这有帮助。
答案 1 :(得分:0)
您访问该项目的行:
mStories.get(position)
将抛出此异常,您传递的位置无效。相反,您应该检查位置是否小于该列表的大小。尝试添加:
if(position < mStories.size() && mStories.get(position) != null) {
return ITEM_VIEW_TYPE_BASIC;
} else {
return ITEM_VIEW_TYPE_FOOTER;
}
答案 2 :(得分:0)
解决我问题的唯一方法是在mStories.get(position -1)
getItemViewType
if (position != 0) {
if (mStories.get(position -1).getIsBreaking() ){
return ITEM_VIEW_TYPE_CUSTOM;
}
return mStories.get(position -1) != null ? ITEM_VIEW_TYPE_BASIC : ITEM_VIEW_TYPE_FOOTER;
}
return 0;
现在,所有项目都会显示,并且位置已经修复。
欣赏这里给出的提示