欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  移动技术

RecyclerView Adapter辅助类详解及示例代码

程序员文章站 2024-03-07 09:37:08
是什么 baserecyclerviewadapterhelper是一个强大并且灵活的recyclerviewadapter 能做什么 可以大量减少你adap...

是什么

baserecyclerviewadapterhelper是一个强大并且灵活的recyclerviewadapter

能做什么

  1. 可以大量减少你adapter写的代码(和正常的adapter相比至少三分之二的)
  2. 可以添加点击事件
  3. 可以很轻松的添加recyclerview加载动画
  4. 添加头部、添加尾部
  5. 支持下拉刷新、上拉加载更多
  6. 支持分组
  7. 支持自定义item类型
  8. 支持setemptyview
  9. 支持子布局多个控件的点击事件

效果图

RecyclerView Adapter辅助类详解及示例代码

配置使用

在 build.gradle 的 repositories 添加:

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

然后增加dependencies

dependencies {
  compile 'com.github.cymchad:baserecyclerviewadapterhelper:v1.5.8'
}

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

添加item点击事件

mquickadapter.setonrecyclerviewitemclicklistener(new basequickadapter.onrecyclerviewitemclicklistener() {
      @override
      public void onitemclick(view view, int position) {

      }
});

添加动画

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

另外也可以制定其他的动画效果

// 默认提供5种方法(渐显、缩放、从下到上,从左到右、从右到左)
// alphain, scalein, slidein_bottom, slidein_left, slidein_right
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)
    };
  }
});

添加多种类型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.addheaderview(getview());
mquickadapter.addfooterview(getview());

加载更多

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

以上就是对recyclerview adapter的资料整理,后续继续添加相关文章,谢谢大家对本站的支持!