package com.lin.poweradapter; import android.support.annotation.LayoutRes; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v7.widget.RecyclerView; import android.view.View; import android.view.ViewGroup; import com.lin.poweradapter.model.Parent; /** * * Created by lin18 on 2017/4/26. */ public class ParentExpandViewHolder<P extends Parent<C>, C> extends PowerViewHolder implements View.OnClickListener { @Nullable private ParentViewHolderExpandCollapseListener mParentViewHolderExpandCollapseListener; private boolean mExpanded; P mParent; ExpandableAdapter mExpandableAdapter; public ParentExpandViewHolder(@NonNull ViewGroup parent, @LayoutRes int layoutResId) { super(parent, layoutResId); mExpanded = false; } public ParentExpandViewHolder(View itemView) { super(itemView); mExpanded = false; } public P getParent() { return mParent; } public int getParentAdapterPosition() { int flatPosition = getAdapterPosition(); if (flatPosition == RecyclerView.NO_POSITION) { return flatPosition; } return mExpandableAdapter.getNearestParentPosition(flatPosition); } public void setMainItemClickToExpand() { getContentView().setOnClickListener(this); } public boolean isExpanded() { return mExpanded; } public void setExpanded(boolean expanded) { mExpanded = expanded; } public void onExpansionToggled(boolean expanded) { } void setParentViewHolderExpandCollapseListener(ParentViewHolderExpandCollapseListener parentViewHolderExpandCollapseListener) { mParentViewHolderExpandCollapseListener = parentViewHolderExpandCollapseListener; } @Override public void onClick(View v) { if (mExpanded) { collapseView(); } else { expandView(); } } public boolean shouldItemViewClickToggleExpansion() { return true; } protected void expandView() { setExpanded(true); onExpansionToggled(false); if (mParentViewHolderExpandCollapseListener != null) { mParentViewHolderExpandCollapseListener.onParentExpanded(getAdapterPosition()); } } protected void collapseView() { setExpanded(false); onExpansionToggled(true); if (mParentViewHolderExpandCollapseListener != null) { mParentViewHolderExpandCollapseListener.onParentCollapsed(getAdapterPosition()); } } interface ParentViewHolderExpandCollapseListener { void onParentExpanded(int flatParentPosition); void onParentCollapsed(int flatParentPosition); } }