资讯专栏INFORMATION COLUMN

BaseRecyclerViewAdapterHelper

tommego / 1622人阅读

摘要:作为最常用的控件,受益群体几乎是所有开发者,希望更多开发者能够一起来维护这个项目,把这个项目做得更好,帮助更多人。我的项目可加群,申请的时候把的账号名字备注上否则不予通过,谢谢配合。

RecyclerView作为Android最常用的控件,受益群体几乎是所有Android开发者,希望更多开发者能够一起来维护这个项目,把这个项目做得更好,帮助更多人。Star我的项目可加Q群558178792,申请的时候把GitHub的账号名字备注上否则不予通过,谢谢配合。中国有句古话叫“授人以鱼不如授人以渔”,不仅仅提供使用,还写了如何实现的原理:

「RecyclerView.Adapter优化了吗?」

「BaseRecyclerAdapter之添加动画」

「BaseRecyclerAdapter之添加不同布局(头部尾部)」

「BaseRecyclerAdapter之添加不同布局(优化篇)」

BaseRecyclerViewAdapterHelper


一个强大并且灵活的RecyclerViewAdapter,欢迎使用。(喜欢的可以Star一下)

Goolge Play Demo

它能做什么?(下载 apk)

优化Adapter代码(减少百分之70%代码)

添加点击item点击、长按事件、以及item子控件的点击事件

添加加载动画(一行代码轻松切换5种默认动画)

添加头部、尾部、下拉刷新、上拉加载(感觉又回到ListView时代)

设置自定义的加载更多布局

添加分组(随心定义分组头部)

自定义不同的item类型(简单配置、无需重写额外方法)

设置空布局(比Listview的setEmptyView还要好用!)

如何使用它?

先在 build.gradle 的 repositories 添加:

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

然后在dependencies添加:

    dependencies {
            compile "com.github.CymChad:BaseRecyclerViewAdapterHelper:v1.7.9"
    }
如何使用它来创建Adapter?

public class QuickAdapter extends BaseQuickAdapter {
    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())
                .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();
mQuickAdapter.setOnRecyclerViewItemLongClickListener();
新增添加子布局多个控件的点击事件

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();
            }
        });
如何使用它添加动画?
// 一行代码搞定(默认为渐显效果)
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());
使用它加载更多
mQuickAdapter.openLoadMore(PAGE_SIZE, true);
mQuickAdapter.setOnLoadMoreListener(new BaseQuickAdapter.RequestLoadMoreListener() {
            @Override
            public void onLoadMoreRequested() {
                mRecyclerView.post(new Runnable() {
                    @Override
                    public void run() {
                        if (mCurrentCounter >= TOTAL_COUNTER) {
                            mQuickAdapter.notifyDataChangedAfterLoadMore(false);
                        } else {
                            mQuickAdapter.notifyDataChangedAfterLoadMore(DataServer.getSampleData(PAGE_SIZE), true);
                            mCurrentCounter = mQuickAdapter.getItemCount();
                        }
                    }

                });
            }
        });
设置自定义加载更多布局
mQuickAdapter.setLoadingView(customView);
使用分组
public class SectionAdapter extends BaseSectionQuickAdapter {
     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();
            }
        });
    }
如何添加多种类型item?
public class MultipleItemQuickAdapter extends BaseMultiItemQuickAdapter {

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

}
使用setEmptyView
mQuickAdapter.setEmptyView(getView());

持续更新!,所以推荐Star项目

感谢

JoanZapata / base-adapter-helper

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/12879.html

相关文章

  • Android优秀github项目整理

    摘要:流式布局开发人员不得不收集的代码工具类常用工具日期的替代使用库替代库外加仿边缘返回仿,有指示器强大的的节操播放器底层为哔哩哔哩的开源播放器选择器仿扁平风格网络框架1.照相选相册,裁剪的 library TakePhotohttps://github.com/crazycodeboy/TakePhoto 2几行代码快速集成二维码扫描功能https://github.com/yipianfeng...

    mykurisu 评论0 收藏0
  • RecyclerAdapter之添加动画(策略模式)

    摘要:的设计策略模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略模式让算法独立于使用它的客户而独立变化。在此采用的是策略模式这样更加灵活,如果需要自定义一个自己的动画,只需要继承实现方法即可。 上篇「RecyclerView.Adapter优化了吗?」主要讲了RecyclerView.Adapter的优化代码以及添加了item的click方法具体实现原理,这篇在...

    xiaoqibTn 评论0 收藏0
  • 基于wanAndroid-开发的Android项目

    摘要:基于开发的开发的目前已完成的功能持续更新登录注册登出首页文章列表首页搜索文章项目分类项目列表收藏文章取消收藏收藏列表下载安装点击下载安装地址我的联系方式大家可以关注我的微信公众号秦子帅一个有质量有态度的公众号 QzsWanAndroid 基于 wanandroid.com 开发的 MVP + Retrofit2 + RxJava2 +okhttp3 开发的 Android APP sh...

    lentoo 评论0 收藏0
  • 一个Kotlin编写的GanK客户端

    摘要:描述使用编写的客户端。下载截图数据来源干货集中营依赖库源码地址 描述 使用kotlin编写的Gank客户端。遵循MD设计规范。 下载 fir 截图 showImg(https://segmentfault.com/img/remote/1460000009704047); showImg(https://segmentfault.com/img/remote/1460000009704...

    honhon 评论0 收藏0
  • 还在用ListView?

    摘要:删除,传入对象的位置。对象从移动到批量添加批量删除改变列表某个布局状态且保持当前位置这种需求是普遍存在的,就是改变列表某一个数据,然后刷新列表,如果是刷新后则会回到最顶部,而同样的操作但是原来滑动的位置不变。 还在用Lisview?RecyclerView都已经出来一年多了! 想必大家多或多或少的接触过或者了解过RecyclerView,为什么没有用起来,原因大概如下? List...

    cod7ce 评论0 收藏0

发表评论

0条评论

tommego

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<