Есть список recyclerView
, в котором распологаются мои элементы. В некоторых(которые содержат категории) из них, есть кнопка нажатия.
Как по нажатию на данную кнопку возможно открывать список с этими категориями?
p.s: Обращаюсь к этим категориям data[position].category
. Делаю аналог expadableList
для recycler'a
.
Пример реализации адаптера для раскрывающихся списков с 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
'е категории.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Как считать несколько (количество может быть разное и мы НЕ можем его задать) строк с консоли в Java?
В своём проекте пришёл к необходимости использования рекурсииВ дальнейшем для защиты приложения хочу использовать обфускация
Возможно мой вопрос может показаться глупым и очевидным, но всё-таки я вынужден его задатьУ меня имеется рабочий код который мне требуется...