Skip to content
Shuyu Guo edited this page Sep 1, 2017 · 9 revisions

欢迎使用

一、功能

状态 功能
支持 系统RecyclerView和任意数据实体
支持 动态加载各种Item类型的列表、瀑布流、网格
支持 列表、瀑布流、网格的刷新和加载更多效果,支持上下左右各个方向
支持 自定义刷新和加载效果
支持 内置支持各种列表和方向的万能分割线
支持 点击和长按效果
支持 空页面
支持 Item的动画效果
支持 Header头支持
支持 一种数据实体对应多种Item

二、关键类介绍

  • BindSuperAdapterManager :所有的数据绑定,操作,配置都是通过它完成的。

  • BindSuperAdapter :通用Adapter,通过上面管理器构建好,设置给RecyclerView即可。

  • BindRecyclerBaseHolder :用户唯一需要继承并重载两个接口的基类,也是用户维护和业务逻辑的主要地方,它是一个继承了RecyclerView.ViewHolder的基类,所以它除了用在本项目,你还可以用在其他的地方。

  • BindDecorationBuilder :可以构造出大多数时候都通用的分割线。

  • API接口

三、使用方式

1、使用过程主要是配置BindSuperAdapterManager,通过各种配置让BindSuperAdapter实现多功能效果。

2、通过不同的数据类型,控制RecyclerView的各种Item的显示顺序。

3、下面代码采用比较详细的配置,更多使用方法请参考demo。

//创建管理器
final BindSuperAdapterManager normalAdapterManager = new BindSuperAdapterManager();

/**
 * 将数据类型Model、layout,Holder绑定起来
 * 一个数据类型Model可以绑定多对(layout + Holder)
 * 但一个Manager中,一个layoutId只能绑定一个holder
 */
//绑定数据、布局、Holder
normalAdapterManager.bind(BindTextModel.class, R.layout.text_item, BindTextHolder.class)
        .bind(BindImageModel.class, R.layout.image_item, BindImageHolder.class)
        .bind(BindMutliModel.class, R.layout.image_item, BindImageHolder.class)
        .bind(BindMutliModel.class, R.layout.mutil_item, BindMutliHolder.class)
        .bind(BindClickModel.class, R.layout.click_item, BindClickHolder.class)
        //绑定空页面显示
        .bindEmpty(BindNoDataHolder.NoDataModel.class, R.layout.empty_layout, BindNoDataHolder.class)
        .bingChooseListener(new OnBindDataChooseListener() {
            //当一种model类型对应多个Holder时,根据model实体判断选择holder
            @Override
            public int getCurrentDataLayoutId(Object object, Class classType, int position, List<Integer> ids) {
                //根据数据判断选择布局+holder
                if (object instanceof BindMutliModel && ids.size() > 1) {
                    BindMutliModel mutliModel = (BindMutliModel) object;
                    if (mutliModel.getType() > 1) {
                        return R.layout.mutil_item;
                    } else {
                        return R.layout.image_item;
                    }
                }
                return ids.get(ids.size() - 1);
            }
        })
        //打开刷新和加载更多
        .setPullRefreshEnabled(true)
        .setLoadingMoreEnabled(true)
        //自定义上下拉
        .setFootView(new BindCustomLoadMoreFooter(this))
        .setRefreshHeader(new BindCustomRefreshHeader(this))
        //打开动画
        .setNeedAnimation(true)
        //点击
        .setOnItemClickListener(new OnItemClickListener() {
            @Override
            public void onItemClick(Context context, int position) {
                //需要减去你的header和刷新的view的数量
                Toast.makeText(context, "点击了!! " + (position), Toast.LENGTH_SHORT).show();
            }
        })
        //监听
        .setLoadingListener(new OnLoadingListener() {
            @Override
            public void onRefresh() {
                recycler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        normalAdapterManager.refreshComplete();
                    }
                }, 1000);
            }

            @Override
            public void onLoadMore() {
                recycler.postDelayed(new Runnable() {
                    @Override
                    public void run() {
                        normalAdapterManager.loadMoreComplete();
                    }
                }, 1000);
            }
        });


adapter = new BindSuperAdapter(this, normalAdapterManager, datas);

recycler.setLayoutManager(new LinearLayoutManager(this, LinearLayoutManager.HORIZONTAL, false));
//间隔线
recycler.addItemDecoration(new BindDecorationBuilder(adapter)
        //颜色
        .setColor(getResources().getColor(R.color.material_deep_teal_500))
        //大小
        .setSpace(dip2px(this, 2))
        .builder());

recycler.setAdapter(adapter);

Clone this wiki locally