Вставка строки Gridview после 10 элементов

Понятия не имею, как этого добиться. Я хочу вставить строку после 10-й позиции элемента в GridView. Я понятия не имею, с чего начать. Вставка строки Gridview после 10 элементов

Спасибо, дайте совет.

вы используете recyclerview с gridlayoutmanager?

prashant17 04.08.2018 11:50

@ prashant17 Я использую ExpandableHeightGridView.

Sanwal Singh 04.08.2018 12:08

Думаю, вид Recycler был бы беспроигрышным вариантом. Explandableheighgridview не может добавить еще одну строку. В противном случае вам, возможно, придется настроить пользовательский интерфейс, добавив RelativeLayout сверху, но я бы этого не делал.

sanjeev 04.08.2018 12:18

@sanjeev - так как я могу это сделать с помощью RecyclerView, любая идея, пожалуйста

Sanwal Singh 04.08.2018 12:24
2
4
102
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вы используете 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;
            }
        }
    });
Ответ принят как подходящий

Шаг 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 coloumn 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.

Интересно. ThemeAdapter - это правильно ReclerViewAdapter?

sanjeev 04.08.2018 12:58

@sanjeev Спасибо !! Да, это работает, у меня такая же реализация

Krishna Sharma 04.08.2018 13:05

Другие вопросы по теме