Есть список 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'е категории.
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости