在 10 个项目后插入 Gridview 行

问题描述 投票:0回答:2

我不知道如何实现这一目标。我想在 GridView 中项目的第 10 个位置之后插入一行。我不知道从哪里开始。 I want to do like this

谢谢,请给一些建议。

android gridview
2个回答
2
投票

第 1 步: 定义两个布局项,一个用于列,另一个用于行

第2步:创建回收器视图适配器,并覆盖以下方法

@Override
public int getItemViewType(int position) {
    int viewType;
    if ((position + 1) % 10 == 0) {
        viewType = VIEW_TYPE_ROW;
    } else {
        viewType = VIEW_TYPE_COLUMN;
    }
    return viewType;
}


@Override
public long getItemId(int position) {
    /**
     * Optimization of notifyDataSetChanged
     * Look at documentation for setHasStableIds(true) and getItemId(int position)
     */
    return STABLE_ID + position;
}

@Override
public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
    switch (viewType) {
        case VIEW_TYPE_COLUMN:
             // inflate column layout and view holder
             break;

        case VIEW_TYPE_ROW:
             // inflate row layout and view holder
             break;
    }
}

@Override
public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
    switch (getItemViewType(position)) {
        case VIEW_TYPE_COLUMN:
             break;

        case VIEW_TYPE_ROW:
             break;
    }
}
        
        

初始化适配器时,请执行以下操作

    final GridLayoutManager layoutManager = new GridLayoutManager(getActivity().getApplicationContext(), 2);
    layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            switch (themeAdapter.getItemViewType(position)) {
                case ThemeAdapter.VIEW_TYPE_COLUMN:
                    return 1;
                case ThemeAdapter.VIEW_TYPE_ROW:
                    return layoutManager.getSpanCount();
                default:
                    return layoutManager.getSpanCount();
            }
        }
    });

这里的 themeAdapter 是你的 RecyclerView 适配器。


1
投票

如果您将

RecyclerView
GridLayoutManager
一起使用,则可以使用
setSpanSizeLookup

您需要一个

adapter
multiviewtype

mLayoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            switch(adapter.getItemViewType(position)){
                case adapter.TYPE_ROW:
                    return 2;
                case adapter.TYPE_COLUMN:
                    return 1;
            }
        }
    });
© www.soinside.com 2019 - 2024. All rights reserved.