您的位置:首页 > 移动开发 > Android开发

Android BaseRecyclerViewAdapterHelper使用

2018-03-27 10:31 423 查看
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
4000
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);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: