package com.anarchy.classifyview.sample.normalfolder.logic; import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import com.anarchy.classify.R; import com.anarchy.classify.simple.PrimitiveSimpleAdapter; import com.anarchy.classifyview.sample.normalfolder.Constants; import com.anarchy.classifyview.sample.normalfolder.bean.BaseBean; import com.anarchy.classifyview.sample.normalfolder.bean.BookBean; import java.util.ArrayList; import java.util.List; /** * <p/> * Date: 16/12/29 11:55 * Author: lizhiming * <p/> */ public abstract class FolderAdapter<VH extends FolderAdapter.ViewHolder> extends PrimitiveSimpleAdapter<List<BookBean>, VH> { protected List<BaseBean> mData; public FolderAdapter(List<BaseBean> data) { mData = data; } @SuppressWarnings("unchecked") protected VH onCreateViewHolder(ViewGroup parent, int viewType) { View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.simple_item, parent, false); return (VH) new ViewHolder(view); } protected void onBindMainViewHolder(VH holder, int position) { } protected void onBindSubViewHolder(VH holder, int mainPosition, int subPosition) { } /** * @param parentIndex * @param index if -1 in main region */ protected void onItemClick(View view, int parentIndex, int index) { } @Override public int getItemCount() { return mData.size(); } /** * 副层级的数量,用于主层级上的显示效果 * * @param parentPosition * @return */ @Override protected int getSubItemCount(int parentPosition) { return mData.get(parentPosition).getBookList().size(); } @Override protected boolean canMergeItem(int selectPosition, int targetPosition) { if (selectPosition < 0) { return false; } BaseBean currentSelected = mData.get(selectPosition); List<BookBean> books = currentSelected.getBookList(); return books.size() < 2; } /** * 合并数据处理 * * @param selectedPosition * @param targetPosition */ @Override protected void onMerged(int selectedPosition, int targetPosition) { List<BookBean> tarBookBeans = mData.get(targetPosition).getBookList(); BookBean bookBean = mData.get(selectedPosition).getBookList().get(0); tarBookBeans.add(bookBean); mData.get(targetPosition).setBookList(tarBookBeans); mData.get(targetPosition).isGroup = true; mData.remove(selectedPosition); } /** * 能否弹出次级窗口 * * @param position 主层级点击的位置 * @param pressedView 点击的view * @return */ @Override protected boolean canExplodeItem(int position, View pressedView) { if (position < mData.size() && mData.get(position).getBookList().size() > 1) { return true; } if(position < mData.size()&&(mData.get(position).getBookList().size()==1)&& mData.get(position).isGroup){ return true; } return false; } /** * 返回副层级的数据源 * * @param parentPosition * @return */ @NonNull @Override protected List<BookBean> getSubSource(int parentPosition) { return mData.get(parentPosition).getBookList(); } @Override protected void onMove(int selectedPosition, int targetPosition) { BaseBean list = mData.remove(selectedPosition); mData.add(targetPosition, list); } /** * 副层级数据移动处理 * * @param bookBeen 副层级数据源 * @param selectedPosition 当前选择的item位置 * @param targetPosition 要移动到的位置 */ @Override protected void onSubMove(List<BookBean> bookBeen, int selectedPosition, int targetPosition) { bookBeen.add(targetPosition, bookBeen.remove(selectedPosition)); } /** * 从副层级移除的元素 * * @param bookBeen 副层级数据源 * @param selectedPosition 将要冲副层级移除的数据 * @return 返回的数为添加到主层级的位置 */ @Override protected int onLeaveSubRegion(int parentPosition,List<BookBean> bookBeen, int selectedPosition) { BookBean bookBean = bookBeen.remove(selectedPosition); if(bookBeen.size() == 0){ mData.remove(parentPosition); } BaseBean baseBean = new BaseBean(); List<BookBean> bookBeanList = new ArrayList<>(); bookBeanList.add(bookBean); baseBean.setBookList(bookBeanList); mData.add(baseBean); return mData.size() - 1; } public static class ViewHolder extends PrimitiveSimpleAdapter.ViewHolder { public ViewHolder(View itemView) { super(itemView); } } }