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);
}
}