强大的BaseRecyclerViewAdapterHelper使用

BaseRecyclerViewAdapterHelper是一款针对RecyclerView的高效适配器库,可极大简化代码量并增强功能,如动画、加载更多、分组等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

介绍

这里写图片描述
相信大家RecyclerView应该不会陌生,大多数开发者应该都使用上它了,它也是google推荐替换ListView的控件,但是用过它的同学应该都知道它在某些方面并没有ListView使用起来方便,需要我们额外的编写代码,今天就给大家介绍一个开源库BaseRecyclerViewAdapterHelper,有了它让你使用RecyclerView的时候,和ListView一样的好用!
那么你要问了,BaseRecyclerViewAdapterHelper能做什么?
优化Adapter代码(减少百分之70%代码)
添加点击item点击、长按事件、以及item子控件的点击事件
添加加载动画(一行代码轻松切换5种默认动画)
添加头部、尾部、下拉刷新、上拉加载(感觉又回到ListView时代)
设置自定义的加载更多布局
添加分组(随心定义分组头部)
自定义不同的item类型(简单配置、无需重写额外方法)
设置空布局(比Listview的setEmptyView还要好用!)
添加拖拽item

如何使用它?

先在 build.gradle 的 repositories 添加:

   allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }

然后增加dependencies

dependencies {
   compile 'com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.9.7'
}

官网为准

如何使用它来创建Adapter?

public class QuickAdapter extends BaseQuickAdapter<Status> {
    public QuickAdapter(Context context) {
        super(context, R.layout.tweet, DataServer.getSampleData());
    }

    @Override
    protected void convert(BaseViewHolder helper, Status item) {
        helper.setText(R.id.tweetName, item.getUserName())
                .setText(R.id.tweetText, item.getText())
                .setText(R.id.tweetDate, item.getCreatedAt())
                .setImageUrl(R.id.tweetAvatar, item.getUserAvatar())
                .setVisible(R.id.tweetRT, item.isRetweet())
                .linkify(R.id.tweetText);
    }
}

或者

public class QuickAdapter extends BaseQuickAdapter<Status> {  
    public QuickAdapter() {  
        super(R.layout.tweet, DataServer.getSampleData());  
    }  
    @Override  
    protected void convert(BaseViewHolder helper, Status item) {  
        helper.setText(R.id.tweetName, item.getUserName())  
                .setText(R.id.tweetText, item.getText())  
                .setText(R.id.tweetDate, item.getCreatedAt())  
                .setVisible(R.id.tweetRT, item.isRetweet())  
                .linkify(R.id.tweetText);  
                 Glide.with(mContext).load(item.getUserAvatar()).crossFade().into((ImageView) helper.getView(R.id.iv));  
    }  
}  

添加item点击事件

mQuickAdapter.setOnRecyclerViewItemClickListener(new BaseQuickAdapter.OnRecyclerViewItemClickListener() {
            @Override
            public void onItemClick(View view, int position) {

            }
});

添加动画

// 一行代码搞定(默认为渐显效果)
quickAdapter.openLoadAnimation();

不喜欢渐显动画可以这样更换

// 默认提供5种方法(渐显、缩放、从下到上,从左到右、从右到左)
quickAdapter.openLoadAnimation(BaseQuickAdapter.ALPHAIN);

另外,如果内置的动画效果不满意,也可易自定义

// 自定义动画如此轻松
quickAdapter.openLoadAnimation(new 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)
                                };
                            }
                        });

使用它添加头部添加尾部

这里写图片描述

mQuickAdapter.addHeaderView(getView());
mQuickAdapter.addFooterView(getView());

添加多种类型item

public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter<MultipleItem> {

    public MultipleItemQuickAdapter(Context context, List data) {
        super(context, data);
        addItmeType(MultipleItem.TEXT, R.layout.text_view);
        addItmeType(MultipleItem.IMG, R.layout.image_view);
    }

    @Override
    protected void convert(BaseViewHolder helper, MultipleItem item) {
        switch (helper.getItemViewType()) {
            case MultipleItem.TEXT:
                helper.setImageUrl(R.id.tv, item.getContent());
                break;
            case MultipleItem.IMG:
                helper.setImageUrl(R.id.iv, item.getContent());
                break;
        }
    }

}

使用它加载更多

mQuickAdapter.setOnLoadMoreListener(PAGE_SIZE, new BaseQuickAdapter.RequestLoadMoreListener() {
            @Override
            public void onLoadMoreRequested() {
                if (mCurrentCounter >= TOTAL_COUNTER) {
                    mRecyclerView.post(new Runnable() {
                        @Override
                        public void run() {
                            mQuickAdapter.isNextLoad(false);
                        }
                    });
                } else {
                    // reqData
                    mCurrentCounter = mQuickAdapter.getItemCount();
                    mQuickAdapter.isNextLoad(true);
                }
            }
        });

使用分组

public class SectionAdapter extends BaseSectionQuickAdapter<MySection> {
     public SectionAdapter(Context context, int layoutResId, int sectionHeadResId, List data) {
        super(context, layoutResId, sectionHeadResId, data);
    }
    @Override
    protected void convert(BaseViewHolder helper, MySection item) {
        helper.setImageUrl(R.id.iv, (String) item.t);
    }
    @Override
    protected void convertHead(BaseViewHolder helper,final MySection item) {
        helper.setText(R.id.header, item.header);
        if(!item.isMroe)helper.setVisible(R.id.more,false);
        else
        helper.setOnClickListener(R.id.more, new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Toast.makeText(context,item.header+"more..",Toast.LENGTH_LONG).show();
            }
        });
    }

使用setEmptyView

mQuickAdapter.setEmptyView(getView());

添加子布局多个控件的点击事件
Adapter

protected void convert(BaseViewHolder helper, Status item) {
    helper.setOnClickListener(R.id.tweetAvatar, new OnItemChildClickListener())
      .setOnClickListener(R.id.tweetName, new OnItemChildClickListener());
}

Activity

mQuickAdapter.setOnRecyclerViewItemChildClickListener(new BaseQuickAdapter.OnRecyclerViewItemChildClickListener() {
            @Override
            public void onItemChildClick(BaseQuickAdapter adapter, View view, int position) {
                String content = null;
                Status status = (Status) adapter.getItem(position);
                switch (view.getId()) {
                    case R.id.tweetAvatar:
                        content = "img:" + status.getUserAvatar();
                        break;
                    case R.id.tweetName:
                        content = "name:" + status.getUserName();
                        break;
                }
                Toast.makeText(AnimationUseActivity.this, content, Toast.LENGTH_LONG).show();
            }
        });

实现拖拽
以前用listview或者gridview进行拖拽是很麻烦的,现在好了,使用RecyclerView可以很方便的实现拖拽,想怎么拖就怎么拖

OnItemDragListener onItemDragListener = new OnItemDragListener() {  
    @Override  
    public void onItemDragStart(RecyclerView.ViewHolder viewHolder, int pos){}  
    @Override  
    public void onItemDragMoving(RecyclerView.ViewHolder source, int from, RecyclerView.ViewHolder target, int to) {}  
    @Override  
    public void onItemDragEnd(RecyclerView.ViewHolder viewHolder, int pos) {}  
}  

OnItemSwipeListener onItemSwipeListener = new OnItemSwipeListener() {  
    @Override  
    public void onItemSwipeStart(RecyclerView.ViewHolder viewHolder, int pos) {}  
    @Override  
    public void clearView(RecyclerView.ViewHolder viewHolder, int pos) {}  
    @Override  
    public void onItemSwiped(RecyclerView.ViewHolder viewHolder, int pos) {}  
};  

ItemDragAndSwipeCallback itemDragAndSwipeCallback = new ItemDragAndSwipeCallback(mAdapter);  
ItemTouchHelper itemTouchHelper = new ItemTouchHelper(itemDragAndSwipeCallback);  
itemTouchHelper.attachToRecyclerView(mRecyclerView);  

// 开启拖拽  
mAdapter.enableDragItem(itemTouchHelper, R.id.textView, true);  
mAdapter.setOnItemDragListener(onItemDragListener);  

// 开启滑动删除  
mAdapter.enableSwipeItem();  
mAdapter.setOnItemSwipeListener(onItemSwipeListener);  

BaseRecyclerViewAdapterHelper还能实现很多功能,这里我就不详解了,有需要的可以直接到git上下载下来体验体验 点击查看

参考别人Demo

简单使用

这里写图片描述

public class MultipleItemAdapter extends BaseQuickAdapter<String> {
    private final int TEXT_TYPE = 1;
    private int mTextLayoutResId; 
   public MultipleItemAdapter(Context context, List data, int... layoutResId) {
        super(context, layoutResId[0], data);
        mTextLayoutResId = layoutResId[1];
    }
    @Override
    protected int getDefItemViewType(int position) {
        if (position % 2 == 0)
            return TEXT_TYPE;
        return super.getDefItemViewType(position);
   } 
   @Override
    protected BaseViewHolder onCreateDefViewHolder(ViewGroup parent, int viewType) {
        if (viewType == TEXT_TYPE)
            return new TextViewHolder(getItemView(mTextLayoutResId, parent));
        return super.onCreateDefViewHolder(parent, viewType);
    }
    @Override
    protected void onBindDefViewHolder(BaseViewHolder holder, String item) {
        if (holder instanceof TextViewHolder)
            holder.setText(R.id.tv, item); 
   }
    @Override
    protected void convert(BaseViewHolder helper, String item) {
        helper.setImageUrl(R.id.iv, item);
    }
    public class TextViewHolder extends BaseViewHolder {
        public TextViewHolder(View itemView) {
            super(itemView.getContext(), itemView);
        }
    }
}
`BaseRecyclerViewAdapterHelper4` 实际上是指 `BaseRecyclerViewAdapterHelper` (BRVAH),它是一个非常流行的、基于 RecyclerView 的适配器库,旨在简化 Android 开发中对列表的操作。通过该库的帮助,开发者可以更方便地管理各种复杂的列表视图。 ### 主要特点 1. **多功能支持**: - 支持多种类型的布局。 - 内置下拉刷新及加载更多功能。 2. **简便易用**: - 提供了简洁的 API 设计,易于理解和使用。 - 减少了重复代码量,并提高了开发效率。 3. **强大的自定义能力**: - 可以轻松添加空页面提示等个性化设置。 - 完全兼容原生 RecyclerView 功能特性。 ### 使用步骤简介: #### 添加依赖项至 build.gradle 文件 首先需要将 BRVAH 库加入项目的构建文件里: ```gradle implementation 'com.github.CymChad:BaseRecyclerViewAdapterHelper:X.X.X' ``` 请注意替换其中的版本号部分 (`X.X.X`) 到最新稳定版。 #### 创建 Adapter 类 接着创建继承于 `BaseQuickAdapter<T>` 或者其他相关基类的具体adapter实例,在构造函数内传入item layout id以及data list: ```java public class MyAdapter extends BaseQuickAdapter<MyDataModel, BaseViewHolder> { public MyAdapter(@Nullable List<MyDataModel> data) { super(R.layout.item_my_data_model, data); } @Override protected void convert(BaseViewHolder helper, MyDataModel item) { // 在这里进行数据绑定操作... helper.setText(R.id.textViewTitle, item.getTitle()); // 更多的数据填充工作...... } } ``` #### 设置到 RecyclerView 中去 最后一步就是把我们刚刚创建好的 adapter 赋值给对应的 recyclerView 对象即可完成全部配置过程. ```java recyclerView.setLayoutManager(new LinearLayoutManager(context)); MyAdapter myAdapter = new MyAdapter(dataList); recyclerView.setAdapter(myAdapter); ``` 以上就是一个简单的入门教程啦! 当然这个库还有很多高级特性和细节需要注意哦~ --
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值