Github最火开源项目-RecyclerView & RecyclerView.Adapter封装

开源项目:https://github.com/open-android/BaseRecyclerAndAdapter

使用步骤

1. 在project的build.gradle添加如下代码(如下图)

allprojects {
    repositories {
        ...
        maven { url "https://jitpack.io" }
    }
}
Github最火开源项目-RecyclerView & RecyclerView.Adapter封装_第1张图片

2. 在Module的build.gradle添加依赖

 compile 'com.github.open-android:BaseRecyclerAndAdapter:0.4.8'
 compile 'com.jakewharton:butterknife:8.4.0'
 annotationProcessor 'com.jakewharton:butterknife-compiler:8.4.0'

ItheimaRecyclerView使用方式

  • 网格RecyclerView(app:spanCount="2",spanCount取值范围[1,10])
    
  • 垂直滚动RecyclerView

      
    
  • 横向滚动RecyclerView(11:一行,12:二行.......,spanCount取值范围[11,19])

      
    

ItheimaRecyclerView添加头

Github最火开源项目-RecyclerView & RecyclerView.Adapter封装_第2张图片
  • xml代码
    
        
        
        
        
        
            
        
    
  • java代码
    RecyclerViewHeader header = (RecyclerViewHeader) findViewById(R.id.header);
    RecyclerView recyclerView = (RecyclerView) findViewById(R.id.recyclerview);
    header.attachTo(recyclerView);

BaseRecyclerAdapter使用方式

adapter = new BaseRecyclerAdapter(recyclerView
        , MyRecyclerViewHolder.class
        , R.layout.item_reyclerview
        , datas);
        
@param recyclerView
@param viewHolderClazz
@param itemResId       recyclerView条目的资源id
@param datas           recyclerView展示的数据集合(可以传null)

ViewHolder模板(ViewHolder如果是内部类必须加上static和public关键字)

public static class MyRecyclerViewHolder extends BaseRecyclerViewHolder {
    //换成你布局文件中的id
    @BindView(R.id.tv_title)
    TextView tvTitle;

    public MyRecyclerViewHolder(ViewGroup parentView, int itemResId) {
        super(parentView, itemResId);
    }

    /**
     * 绑定数据的方法,在mData获取数据(mData声明在基类中)
     */
    @Override
    public void onBindRealData() {
        tvTitle.setText(mData.title);
    }


    /**
     * 给按钮添加点击事件(button改成你要添加点击事件的id)
     * @param v
     */
    @OnClick(R.id.button)
    public void click(CheckBox v) {
    }
}

下啦刷新 & 加载更多组合控件(下啦刷新和加载更多内部实现,你只需要在对应的ViewHolder做数据绑定即可)

使用前必须调用:ItheimaHttp.init(context, baseUrl);(如果调用过则不需要重复调用)

xml布局



    

java代码实现布局

pullToLoadMoreRecyclerView = new PullToLoadMoreRecyclerView(mSwipeRefreshLayout, recyclerView, MyViewHolder.class) {
            @Override
            public int getItemResId() {
                //recylerview item资源id
                return R.layout.item_recylerview;
            }

            @Override
            public String getApi() {
                //接口
                return "order/list";
            }

            /**
             * 是否有更多数据(可以更具自己的分页条件重写)
             */
            public boolean isMoreData() {
                //在这里可以使用内部扩展字段mMextendObject在进行分页处理
                //mMextendObject在LoadingDataListener.onSuccess回调中赋值
                return mCurPage <= mTotalPage;
            }
        };

//设置监听

pullToLoadMoreRecyclerView.setLoadingDataListener(new PullToLoadMoreRecyclerView.LoadingDataListener() {

        @Override
        public void onRefresh() {
            //监听下啦刷新,如果不需要监听可以不重新该方法
            L.i("setLoadingDataListener onRefresh");
        }

        @Override
        public void onStart() {
            //监听http请求开始,如果不需要监听可以不重新该方法
            L.i("setLoadingDataListener onStart");
        }

        @Override
        public void onSuccess(Bean o) {
            //监听http请求成功,如果不需要监听可以不重新该方法
            L.i("setLoadingDataListener onSuccess: " + o);
        }

        @Override
        public void onFailure() {
             //监听http请求失败,如果不需要监听可以不重新该方法
            L.i("setLoadingDataListener onFailure");
        }
});


//添加头
pullToLoadMoreRecyclerView.putHeader(key,value);
//添加请求参数
pullToLoadMoreRecyclerView.putParam(key, value);
//开始请求
pullToLoadMoreRecyclerView.requestData();


//控制加状态,可以在监听中处理
    loadMoreViewHolder.loading("加载中...");//默认文字:"加载中..."
    loadMoreViewHolder.loadingFinish("没有更多数据");

高级用法

//如果使用数字控制页数可以使用如下api
//设置参数的key
setCurPageKey("curPage");//当前页key
setPageSizeKey("pageSize");//每一页数量的key
//设置参数的值
setPageSize(1);//设置每一页数量
setTotalPage(20);//设置一共有多少页
//如果使用其他方式分页
可以设置setLoadingDataListener在onSuccess(Bean o)回调中处理分页
onSuccess回调在每一次加载数据成功后回调

Adapter分类

class MyTypeAdapter extends BaseRecyclerAdapter {
    private final int ITEM_TYPE_1 = 0;
    private final int ITEM_TYPE_2 = 1;

    public MyTypeAdapter(RecyclerView recyclerView, List datas) {
        super(recyclerView, null, 0, datas);
    }

    @Override
    public BaseRecyclerViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
        //选择类型
        if (viewType == ITEM_TYPE_2) {
            return new MyTypeHolder2(parent, R.layout.item_type2);
        }
        return new MyTypeHolder1(parent, R.layout.item_type1);
    }

    @Override
    public int getItemViewType(int position) {
        //根据position返回类型
        return position % 2 == 0 ? ITEM_TYPE_2 : ITEM_TYPE_1;
    }
}

动态向Adapter中添加数据

@param isLoadMore 数据是否累加
@param datas      List数据
adapter.addDatas(true,datas);

清空Adapter中所以数据(不推荐使用,使用adapter.addDatas(true,datas))可以实现相同的功能

adapter.clearAllData();

欢迎关注微信公众号

Github最火开源项目-RecyclerView & RecyclerView.Adapter封装_第3张图片

更多干货请下载app

黑马助手.png

你可能感兴趣的:(Github最火开源项目-RecyclerView & RecyclerView.Adapter封装)