SherlockAdapter

项目地址:EvilBT/SherlockAdapter
简介:有添加多头部,多尾部,自动加载更多,空布局,多布局,伸缩子项,点击事件,长按事件等常用功能
更多:作者   提 Bug   示例 APK   
标签:
adapter-recyclerView-

新增功能

  • 2017-01-22 新添加支持多选 item,可实现例如选择多张图片的功能

一个封装了 RecyclerView.Adapter 一些常用功能的库。

封装的功能

  • item 的点击事件
  • item 的长按事件
  • item 的子 View 对应的点击事件
  • item 的子 View 对应的长按事件
  • 自动加载更多功能,内置一个基础的加载更多界面,如果有需要,可以自定义界面
  • Empty 界面,已经内置了一个基础的 Empty 界面,如果有需要,可以自定义界面
  • Failed 界面,已经内置了一个基础的 Failed 界面,如果有需要,可以自定义界面
  • 支持添加任意数量的 HeadLayout
  • 支持添加任意数量的 FootLayout
  • 支持多布局数据界面
  • 支持伸缩子项,理论上无层次限制
  • 新添加支持多选 item,可实现例如选择多张图片的功能

注意事项

先说注意事项,一般来讲,由于 SherlockAdapter 采用 LayoutRes 的值来作为 ItemViewType 返回,而 ItemViewType 是用来区分不同的 Item 的,所以如果不是同种 Item,就不要使用同一个 Layout 文件,例如头部 HeadLayout 跟 ItemLayout 的布局是一样的情况下,就复制多一个 Layout 出来就行,不要共用一个 Layout。

开始配置

Step 1. Add the JitPack repository to your build file

Add it in your root build.gradle at the end of repositories:

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

Step 2. Add the dependency

dependencies {
    compile 'com.github.EvilBT:SherlockAdapter:v1.0.4'
}

使用方法

一般用法,继承 BaseAdapter实现三个抽象方法即可:

public abstract class BaseAdapter<T> extends RecyclerView.Adapter<BaseViewHolder>{    

    \\....

     /**
     * 返回布局 layout
     */
    @LayoutRes
    public abstract int getLayoutRes(int index);

    /**
     * 在这里设置显示
     */
    public abstract void convert(BaseViewHolder holder, T data, int index);

    /**
     * 开启子 view 的点击事件,或者其他监听
     */
    public abstract void bind(BaseViewHolder holder,int layoutRes);
}

添加头部 HeadLayout

adapter.addHeadLayout(R.layout.item_head);

然后在 convertHead 里控制显示。

public class HeadAndFootAdapter extends BaseAdapter<String> {

    @Override
    public void convertHead(BaseViewHolder holder, @LayoutRes int headLayout, int index) {
        holder.setText(R.id.tv_head,"这是头部"+(index+1));
    }
}

添加头部

添加尾部 FootLayout

adapter.addFootLayout(R.layout.item_foot);

然后在 convertFoot 里控制显示。

public class HeadAndFootAdapter extends BaseAdapter<String> {
    @Override
    public void convertFoot(BaseViewHolder holder, @LayoutRes int footLayout, int index) {
        holder.setText(R.id.tv_foot,"这是尾部"+(index+1));
    }
}

具体参考HeadAndFootActivity

添加尾部

设置点击事件

bind(BaseViewHolder holder,int layoutRes)里调用holder.setClickable(ID,true);启用 item 的子 view 的点击事件,并设置一下BaseAdapter.setOnItemClickListener()就可以了,详情参考MainActivity里的 Adapter。如果只设置了点击事件,没有启用子 view 的点击,则是 itemView 响应消息。

设置长按事件

bind(BaseViewHolder holder,int layoutRes)里调用holder.setLongClickable(ID,true);启用 item 的子 view 的长按事件,并设置一下BaseAdapter.setOnItemLongClickListener()就可以了,如果只设置了点击事件,没有启用子 view 的点击,则是 itemView 响应消息。基本使用方法与点击事件类似,具体参考 Demo 中的MultiItemActivity.

开启自动加载更多功能

参考 AutoLoadMoreActivity 的代码:

        //必须设置事件监听与开启 auto
        mAdapter.openAutoLoadMore(true);
        mAdapter.setOnLoadMoreListener(new OnLoadMoreListener() {
            @Override
            public void onLoadMore() {
                //TODO Do something
            }
        });

正在自动加载 完成加载 加载失败 没有数据

支持多布局

继承BaseMultiAdapter抽象类,数据类型实现IMultiItem接口(可以简单继承DefaultMultiItem)即可。 具体参考 Demo 中的MultiItemActivity

多布局

支持伸缩子项

继承 BaseExpandableAdapter,如果有可子项需要伸缩,数据类型实现IExpandable(可以简单继承DefaultExpandable),子项数据类型实现IMultiItem,如果 没有子项可伸缩,则数据类型实现IMultiItem即可,如果子项也有它的子项,则子项也需要实现IExpandable,子项的子项数据类型 实现IMultiItem接口。详情参考 Demo 中的ExpandableActivity

伸缩子项

多选列表

继承 BaseMultiSelectAdapter,数据类型实现IMultiSelectItem接口(可以简单继承DefaultMultiSelectItem)即可,具体可以参考 Demo 中MultiSelectItemActivity的实现方式。

多选列表

更多细节请下载 Demo 查看源代码。

License

Copyright (C) 2016 zpayh. http://zpayh.xyz

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.

自己记录、分享给好友:
Android 开发经验分享
Android 开发经验分享