package com.mikepenz.fastadapter.commons.items; import android.support.v7.widget.RecyclerView; import com.mikepenz.fastadapter.IExpandable; import com.mikepenz.fastadapter.IItem; import com.mikepenz.fastadapter.ISubItem; import com.mikepenz.fastadapter.items.GenericAbstractItem; import java.util.List; public abstract class GenericAbstractExpandableItem<Model, Parent extends GenericAbstractItem<Model, Parent, VH> & IExpandable & ISubItem, VH extends RecyclerView.ViewHolder, SubItem extends IItem & ISubItem> extends GenericAbstractItem<Model, Parent, VH> implements IExpandable<GenericAbstractExpandableItem, SubItem>, ISubItem<GenericAbstractExpandableItem, Parent> { private List<SubItem> mSubItems; private Parent mParent; private boolean mExpanded = false; public GenericAbstractExpandableItem(Model model) { super(model); } @Override public boolean isExpanded() { return mExpanded; } @Override public GenericAbstractExpandableItem<Model, Parent, VH, SubItem> withIsExpanded(boolean expanded) { mExpanded = expanded; return this; } @Override public List<SubItem> getSubItems() { return mSubItems; } @Override public boolean isAutoExpanding() { return true; } @Override public GenericAbstractExpandableItem<Model, Parent, VH, SubItem> withSubItems(List<SubItem> subItems) { this.mSubItems = subItems; for (SubItem subItem : subItems) { subItem.withParent(this); } return this; } @Override public Parent getParent() { return mParent; } @Override public GenericAbstractExpandableItem<Model, Parent, VH, SubItem> withParent(Parent parent) { this.mParent = parent; return this; } @Override public boolean isSelectable() { //this might not be true for your application return getSubItems() == null; } }