在StaggeredGridLayoutManager中控制RecyclerView项的位置

时间:2018-04-11 07:55:46

标签: android

我在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;
        }
    }

我想要的效果是所有奇数编号的卡片视图应该出现在第二列中,所有偶数编号的卡片视图应该出现在第一列中。

这是我所取得成就的形象。

Snachat discover like grid

问题是第11位,尽管奇数编号出现在第一列。 我该怎么做才能确保所有奇数/偶数视图分别出现在第2 /第1列

0 个答案:

没有答案