Android BaseRecyclerViewAdapterHelper使用

简介: BaseRecyclerViewAdapterHelper项目下载1 . 使用 // 基类 具体实现类 布局 数据源 ...

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);
    }
}
目录
相关文章
|
6月前
|
JSON API Android开发
Android bundetool 详解
Android bundetool 详解
|
Android开发
Android | 理解 ViewRootImpl
Android | 理解 ViewRootImpl
Android | 理解 ViewRootImpl
|
算法 Android开发
Android的路接下来该怎么走?
其实想写这篇文章好久了,很多小伙伴们也经常在群里探讨android移动开发者的走向,一部分人都想多快好省,间歇性踌躇满志、持续性混吃等死 ,只想用CV的开发模式们快速完成工作,然后回家王者农药。其实这种现象很普遍,我想告诉你的是 ,只要你走对方向,不断地学习,android的春天依然是健在的。
8827 0
|
Android开发 数据格式 XML
|
Android开发
Android BGABadgeView:BGABadgeFrameLayout(5)
 Android BGABadgeView:BGABadgeFrameLayout(5) BGABadgeView除了有自己的线性布局,相对布局外(见附录文章7,8),还实现了FrameLayout。
1027 0
|
Android开发
android bounceScrollView
              package com.baoy.demobouncescrollview; import android.
868 0
|
Linux Ubuntu Apache