-
Notifications
You must be signed in to change notification settings - Fork 63
Home
Shuyu Guo edited this page Sep 1, 2017
·
9 revisions
状态 | 功能 |
---|---|
支持 | 系统RecyclerView和任意数据实体 |
支持 | 动态加载各种Item类型的列表、瀑布流、网格 |
支持 | 列表、瀑布流、网格的刷新和加载更多效果,支持上下左右各个方向 |
支持 | 自定义刷新和加载效果 |
支持 | 内置支持各种列表和方向的万能分割线 |
支持 | 点击和长按效果 |
支持 | 空页面 |
支持 | Item的动画效果 |
支持 | Header头支持 |
支持 | 一种数据实体对应多种Item |
-
BindSuperAdapterManager :所有的数据绑定,操作,配置都是通过它完成的。
-
BindSuperAdapter :通用Adapter,通过上面管理器构建好,设置给RecyclerView即可。
-
BindRecyclerBaseHolder :用户唯一需要继承并重载两个接口的基类,也是用户维护和业务逻辑的主要地方,它是一个继承了RecyclerView.ViewHolder的基类,所以它除了用在本项目,你还可以用在其他的地方。
-
BindDecorationBuilder :可以构造出大多数时候都通用的分割线。
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);