Как управлять пустым диапазоном в GridLayoutManager?

Я устанавливаю каталог контактов в разделе recyclerview с помощью диспетчера сетки, моя проблема в том, что заголовок также устанавливается как элемент в промежутке, если промежуток пуст.

Я пытался использовать метод SpanSizeLookup. Это не работает, как я ожидал.

layoutManager = new GridLayoutManager(getActivity(), 3);
        layoutManager.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
            @Override
            public int getSpanSize(int position) {
                switch(adapterDocument.getItemViewType(position)){
                    case SectionedRecyclerViewAdapter.VIEW_TYPE_HEADER:
                        return 3;

                    case SectionedRecyclerViewAdapter.VIEW_TYPE_ITEM_LOADED:
                        return 1;
                    default:
                        return 1;
                }
            }
        });

Это то, что я получаю

введите описание изображения здесь

И это то, что я действительно хочу:

введите описание изображения здесь

Как сделать так, чтобы заголовок был в следующей строке с полной шириной? Спасибо.

1 ответ

Что -то с вашим кодом, я изменил код в onCreateView из примера 1 в:

    sectionAdapter = new SectionedRecyclerViewAdapter();

    for(char alphabet = 'A'; alphabet <= 'Z';alphabet++) {
        List<String> contacts = getContactsWithLetter(alphabet);

        if (alphabet == 'B' || alphabet == 'D') {
            contacts = Collections.emptyList();
        }

        if (contacts.size() > 0) {
            sectionAdapter.addSection(new ContactsSection(String.valueOf(alphabet), contacts));
        }
    }

    RecyclerView recyclerView = (RecyclerView) view.findViewById(R.id.recyclerview);
    GridLayoutManager glm = new GridLayoutManager(getContext(), 3);
    glm.setSpanSizeLookup(new GridLayoutManager.SpanSizeLookup() {
        @Override
        public int getSpanSize(int position) {
            switch(sectionAdapter.getSectionItemViewType(position)) {
                case SectionedRecyclerViewAdapter.VIEW_TYPE_HEADER:
                    return 3;
                default:
                    return 1;
            }
        }
    });
    recyclerView.setLayoutManager(glm);
    recyclerView.setAdapter(sectionAdapter);

и это работает нормально, это результат:

результат

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