Android BaseRecyclerViewAdapterHelper使用
BaseRecyclerViewAdapterHelper项目下载 1 . 使用 // 基类 具体实现类 布局 数据源 BaseQuickAdapter homeAdapter = new HomeAdapter(R.layout.home_item_view, mDataList); homeAdapter.openLoadAnimation(); // 开启动画 // 加载头布局 View top = getLayoutInflater().inflate(R.layout.top_view, (ViewGroup) mRecyclerView.getParent(), false); // 添加头布局 homeAdapter.addHeaderView(top); // 设置点击事件 homeAdapter.setOnItemClickListener(new BaseQuickAdapter.OnItemClickListener() { @Override public void onItemClick(BaseQuickAdapter adapter, View view, int position) { Log.e("adapter", "点击"); } }); // 设置适配器 mRecyclerView.setAdapter(homeAdapter); // 继承自BaseQuickAdapter的适配器 实体类 public class HomeAdapter extends BaseQuickAdapter<HomeItem, BaseViewHolder> { public HomeAdapter(int layoutResId, List data) { super(layoutResId, data); } @Override protected void convert(BaseViewHolder helper, HomeItem item) { // 设置文本 helper.setText(R.id.text, item.getTitle()); // 设置图片 helper.setImageResource(R.id.icon, item.getImageResource()); } } 2. api介绍 adapter.openLoadAnimation(); 开启显示时条目动画 adapter.openLoadAnimation(BaseQuickAdapter.ALPHAIN); 设置开启动画的类型,可选类型有 BaseQuickAdapter.ALPHAIN 透明动画 BaseQuickAdapter.SCALEIN 缩放动画 BaseQuickAdapter.SLIDEIN_BOTTOM 底部滑入 BaseQuickAdapter.SLIDEIN_LEFT 左边滑入 BaseQuickAdapter.SLIDEIN_RIGHT 右边滑入 该参数可以自定义adapter.openLoadAnimation(new CustomAnimation());其中CustomAnimation继承在BaseAnimation,代码如下 public class CustomAnimation implements BaseAnimation { @Override public Animator[] getAnimators(View view) { return new Animator[]{ ObjectAnimator.ofFloat(view, "scaleY", 1, 1.1f, 1), ObjectAnimator.ofFloat(view, "scaleX", 1, 1.1f, 1) }; } } adapter.isFirstOnly(false); 设置是否仅在第一次加载时显示动画。设置true时,当数据上滑时出现动画,下滑时无动画出现;设置false时,仅在上滑时出现动画. adapter.setNotDoAnimationCount(3); 设置第一屏显示不做动画的数量 adapter.setOnItemClickListener(listener); adapter.setOnItemLongClickListener(listener); 设置条目点击与长点击 adapter.setOnItemChildClickListener(listener); adapter.setOnItemChildLongClickListener(listener); 设置监听事件,其中根据view的id来区分点击的是哪一个控件 adapter.setOnItemChildClickListener(new BaseQuickAdapter.OnItemChildClickListener() { @Override public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) { switch (view.getId()) { case R.id.img: Log.e("adapter","img"); break; case R.id.tweetName: Log.e("adapter","tweetName"); break; break; default: break; } } }); adapter.addHeaderView(headerView); 添加一个头布局 adapter.addFooterView(footerView, 0); 添加一个尾布局 adapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {}, mRecyclerView); 加载更多,其中下拉刷新使用 SwipeRefreshLayout adapter.setOnItemChildClickListener(listener); 设置条目中子控件的点击事件 adapter.setEmptyView(errorView); 设置一个空的布局,可用于网络异常,无数据的情况下 adapter.enableSwipeItem(); adapter.setOnItemSwipeListener(onItemSwipeListener); adapter.enableDragItem(mItemTouchHelper); adapter.setOnItemDragListener(listener); 设置允许左滑右滑动条目 private ItemTouchHelper mItemTouchHelper; private ItemDragAndSwipeCallback mItemDragAndSwipeCallback; mItemDragAndSwipeCallback = new ItemDragAndSwipeCallback(mAdapter); mItemTouchHelper = new ItemTouchHelper(mItemDragAndSwipeCallback); mItemTouchHelper.attachToRecyclerView(mRecyclerView); // 设置滑动方向,拖拽方向 //mItemDragAndSwipeCallback.setDragMoveFlags(ItemTouchHelper.LEFT | ItemTouchHelper.RIGHT | ItemTouchHelper.UP | ItemTouchHelper.DOWN); mItemDragAndSwipeCallback.setSwipeMoveFlags(ItemTouchHelper.START | ItemTouchHelper.END); mAdapter.enableSwipeItem(); mAdapter.setOnItemSwipeListener(onItemSwipeListener); mAdapter.enableDragItem(mItemTouchHelper); mAdapter.setOnItemDragListener(listener); 3. 多条目适配器 public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter<MultipleItem, BaseViewHolder> { public MultipleItemQuickAdapter(Context context, List data) { super(data); addItemType(MultipleItem.TEXT, R.layout.item_text_view); addItemType(MultipleItem.IMG, R.layout.item_image_view); addItemType(MultipleItem.IMG_TEXT, R.layout.item_img_text_view); } @Override protected void convert(BaseViewHolder helper, MultipleItem item) { switch (helper.getItemViewType()) { case MultipleItem.TEXT: helper.setText(R.id.tv, item.getContent()); break; case MultipleItem.IMG_TEXT: switch (helper.getLayoutPosition() % 2) { case 0: helper.setImageResource(R.id.iv, R.mipmap.animation_img1); break; case 1: helper.setImageResource(R.id.iv, R.mipmap.animation_img2); break; default: break; } default: break; } } } 数据源 // 实现MultiItemEntity接口 public class MultipleItem implements MultiItemEntity { public static final int TEXT = 1; public static final int IMG = 2; public static final int IMG_TEXT = 3; private int itemType; public MultipleItem(int itemType) { this.itemType = itemType; } @Override public int getItemType() { return itemType; } } 4. 分组条目适配器 // 继承自BaseSectionQuickAdapter public class SectionAdapter extends BaseSectionQuickAdapter<MySection, BaseViewHolder> { /** * 构造方法 * @param sectionHeadResId 头布局 * @param layoutResId 条目布局 * @param data 数据 */ public SectionAdapter(int layoutResId, int sectionHeadResId, List data) { super(layoutResId, sectionHeadResId, data); } @Override protected void convertHead(BaseViewHolder helper, final MySection item) { helper.setText(R.id.header, item.header); helper.setVisible(R.id.more, item.isMore()); helper.addOnClickListener(R.id.more); } @Override protected void convert(BaseViewHolder helper, MySection item) { Video video = (Video) item.t; switch (helper.getLayoutPosition() % 2) { case 0: helper.setImageResource(R.id.iv, R.mipmap.m_img1); break; case 1: helper.setImageResource(R.id.iv, R.mipmap.m_img2); break; default: break; } helper.setText(R.id.tv, video.getName()); } } 实体类 // 继承SectionEntity public class MySection extends SectionEntity<Video> { public MySection(boolean isHeader, String header) { super(isHeader, header); } public MySection(Video t) { super(t); } }