package com.lin.poweradapter; import android.support.annotation.CallSuper; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.view.ViewGroup; import java.util.List; /** * * Created by lin18 on 2017/4/8. */ public abstract class MultiAdapter<T, VH extends PowerViewHolder> extends SingleAdapter<T, VH> { @NonNull protected AdapterDelegatesManager<T, VH> delegatesManager; public MultiAdapter(@NonNull List<T> items) { super(items); this.delegatesManager = new AdapterDelegatesManager<>(); } public MultiAdapter(@Nullable Object listener) { super(listener); this.delegatesManager = new AdapterDelegatesManager<>(); } public MultiAdapter(@Nullable Object listener, @NonNull List<T> items) { super(listener, items); this.delegatesManager = new AdapterDelegatesManager<>(); } @CallSuper @Override public VH onCreateVHolder(ViewGroup parent, int viewType) { return delegatesManager.onCreateViewHolder(parent, viewType); } @CallSuper @Override public void onBindVHolder(VH holder, int position) { delegatesManager.onBindViewHolder(getItem(position), position, holder, null); } @Override public void onBindViewHolder(VH holder, int position, List<Object> payloads) { if (getItemViewType(position) == LOAD_MORE) { } else if (getItemViewType(position) == HEADER) { } else if (getItemViewType(position) == FOOTER) { } else { setListener(holder, position); delegatesManager.onBindViewHolder(getItem(position), position, holder, payloads); } } @Override public int getItemViewType(int position) { if (getDataItemCount() > 0 && position < getItemCountContainHeader()) { return delegatesManager.getItemViewType(getItem(position), position); } return super.getItemViewType(position); } @Override public void onViewRecycled(VH holder) { super.onViewRecycled(holder); delegatesManager.onViewRecycled(holder); } @Override public boolean onFailedToRecycleView(VH holder) { super.onFailedToRecycleView(holder); return delegatesManager.onFailedToRecycleView(holder); } @Override public void onViewAttachedToWindow(VH holder) { super.onViewAttachedToWindow(holder); delegatesManager.onViewAttachedToWindow(holder); } @Override public void onViewDetachedFromWindow(VH holder) { super.onViewDetachedFromWindow(holder); delegatesManager.onViewDetachedFromWindow(holder); } }