我在RecyclerView上使用带有两列的StaggeredGridLayoutManager,具有异构/多种布局,以实现类似Snapchat发现功能的布局。
我已经覆盖了getItemViewType(int position)方法来选择布局文件。 这是代码。
public int getItemCount() {
return this.mThumbnailDTOList.size();
}
@Override
public int getItemViewType(int position) {
if(position % 2 == 0){
return LAYOUT1;
}
else if(position % 2 != 0){
return LAYOUT2;
}
return -1;
}
@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup viewGroup, int viewType) {
RecyclerView.ViewHolder viewHolder;
LayoutInflater inflater = LayoutInflater.from(viewGroup.getContext());
switch (viewType) {
case LAYOUT1:
View v1 = inflater.inflate(R.layout.homepage_left_column_viewholder, viewGroup, false);
viewHolder = new LeftColumnViewHolder(v1);
break;
case LAYOUT2:
View v2 = inflater.inflate(R.layout.homepage_right_column_viewholder, viewGroup, false);
viewHolder = new RightColumnViewHolder(v2);
break;
default:
View v = inflater.inflate(R.layout.homepage_left_column_viewholder, viewGroup, false);
viewHolder = new LeftColumnViewHolder(v);
break;
}
return viewHolder;
}
@Override
public void onBindViewHolder(RecyclerView.ViewHolder viewHolder, int position) {
switch (viewHolder.getItemViewType()) {
case LAYOUT1:
LeftColumnViewHolder vh1 = (LeftColumnViewHolder) viewHolder;
configureLeftColumnViewHolder(vh1, position);
break;
case LAYOUT2:
RightColumnViewHolder vh2 = (RightColumnViewHolder) viewHolder;
configureRightColumnViewHolder(vh2, position);
break;
default:
LeftColumnViewHolder vh = (LeftColumnViewHolder) viewHolder;
configureLeftColumnViewHolder(vh, position);
break;
}
}
我想要的效果是所有奇数编号的卡片视图应该出现在第二列中,所有偶数编号的卡片视图应该出现在第一列中。
这是我所取得成就的形象。
问题是第11位,尽管奇数编号出现在第一列。 我该怎么做才能确保所有奇数/偶数视图分别出现在第2 /第1列