Открывать дополнительно список в recyclerView

244
04 июля 2017, 21:16

Есть список recyclerView, в котором распологаются мои элементы. В некоторых(которые содержат категории) из них, есть кнопка нажатия.

Как по нажатию на данную кнопку возможно открывать список с этими категориями?

p.s: Обращаюсь к этим категориям data[position].category. Делаю аналог expadableList для recycler'a.

Answer 1

Пример реализации адаптера для раскрывающихся списков с RecyclerView

В класс категории добавить параметр expanded:

public class ItemsGroup<T> {
    private List<T> items;
    private boolean expanded;
    public List<T> getItems() {
        return items;
    }
    public void setItems(List<T> items) {
        this.items = items;
    }
    public boolean isExpanded() {
        return expanded;
    }
    public void expand() {
        expanded = true;
    }
    public void collapse() {
        expanded = false;
    }
}

Затем в адаптере добавить метод для вычисления "плоского списка" и метод для раскрытия/сворачивания списка по нажатию:

public class RecyclerViewExpandableAdapter extends RecyclerView.Adapter<RecyclerView.ViewHolder> {
    private List<ItemsGroup<?>> groups;
    private List<?> getFlatItemsList() {
        List<Object> items = new ArrayList<>();
        for (ItemsGroup<?> group : groups) {
            items.add(group);
            if (group.isExpanded()) {
                items.addAll(group.getItems());
            }
        }
        return items;
    }
    @Override
    public RecyclerView.ViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        ...
    }
    @Override
    public void onBindViewHolder(RecyclerView.ViewHolder holder, int position) {
        ...
    }
    @Override
    public int getItemCount() {
        return getFlatItemsList().size();
    }
    private void onHeaderClicked(ItemsGroup<?> header) {
        int idx = getFlatItemsList().indexOf(header);
        if (header.isExpanded()) {
            header.collapse();
            notifyItemRangeRemoved(idx + 1, header.getItems().size());
        } else {
            header.expand();
            notifyItemRangeInserted(idx + 1, header.getItems().size());
        }
    }
}

Метод onHeaderClicked нужно вызывать в OnClickListener'е категории.

READ ALSO
Как считать несколько строк с консоли в Java?

Как считать несколько строк с консоли в Java?

Как считать несколько (количество может быть разное и мы НЕ можем его задать) строк с консоли в Java?

412
Обфускация java и рекурсия

Обфускация java и рекурсия

В своём проекте пришёл к необходимости использования рекурсииВ дальнейшем для защиты приложения хочу использовать обфускация

277
Использование классов и объектов в Java

Использование классов и объектов в Java

Возможно мой вопрос может показаться глупым и очевидным, но всё-таки я вынужден его задатьУ меня имеется рабочий код который мне требуется...

426