你还在为列表[单选]、[多选]写重复的逻辑吗android
项目中常常性会碰到列表的单选、多选,实现起来好像也不难,可是最近项目有好多个须要单选/多选的页面,看到设计稿的一瞬间,脑子灵光一闪,为啥不把这些简单而又繁琐的逻辑给封装起来呢(懒癌发做)?git
因而就有了下面的小东西(开源库)...github
Adapter.notifyItemChange
方法,因此不会有闪屏Bugallprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
复制代码
Step 2. 在须要使用的模块下添加如下依赖bash
dependencies {
//Tag更换成最新的版本号,好比 1.1
implementation 'com.github.gminibird:CheckHelper:Tag'
}
复制代码
依赖包中依赖了RecyclerView
,若是项目中已经使用了不一样版本,可使用如下配置:app
dependencies {
//Tag更换成最新的版本号,好比 1.1
implementation 'com.github.gminibird:CheckHelper:Tag',{
exclude group: 'com.android.support'
}
}
复制代码
最后那个1.0是版本号,能够上 GitHub 上看最新的,而后就能够愉快的玩耍啦。maven
SingleCheckHelper mCheckHelper = new SingleCheckHelper();
//or
MultiCheckHelper mCheckHelper = new MultiCheckHelper();
复制代码
mCheckHelper.register(String.class, new CheckHelper.Checker<String, LwViewHolder>()
@Override
public void check(String s, LwViewHolder holder) {
//选中状态
holder.itemView.setBackgroundColor(0xFF73E0E4); //蓝色
holder.setChecked(R.id.checkbox, true);
}
@Override
public void unCheck(String s, LwViewHolder holder) {
//非选中状态
holder.itemView.setBackgroundColor(0xFFFFFFFF); //白色
holder.setChecked(R.id.checkbox, false);
}
});
复制代码
@Override
protected void onBind(@NonNull LwViewHolder holder, @NonNull String item) {
//这里用了本身封装的Adapter,至关于onBindViewHolder方法
mCheckHelper.bind(item, holder, holder.itemView);
}
复制代码
而后,而后就完成了。。。运行就能够看到想要的效果,选中的数据能够调用相应CheckHelper
实例的getXXX()
获取。ide
废话少说,先上图:post
返回值 | 方法 | 说明 |
---|---|---|
void | register(Class, Checker) | 注册Checker,提供选中以及非选中状态 |
void | bind(Object, ViewHolder) | 绑定,没有指定点击View,须要额外设置点击事件,并主动调用select()方法 |
void | bind(Object,ViewHolder, @IdRes int) | 绑定,并指定触发事件的 View id |
void | bind(Object,ViewHolder, View) | 绑定,并指定触发事件的 View |
void | bind(Object, ViewHolder, boolean) | 手动绑定 |
void | select(Object, ViewHolder) | 手动选择(状态值非当前状态的相反值) |
void | select(Object, ViewHolder, boolean) | 手动选择(可设置状态) |
void | addOnCheckListener(Class,OnCheckListene) | 添加check监听(触发条件为bind监听与select监听的并集) |
void | addOnSelectListener(Class,OnSelectListener) | 添加select监听(点击时调用) |
void | addOnBindListener(Class,onBindListener) | 添加bind监听(onBindViewHolder调用时调用) |
void | addInterceptor(Interceptor interceptor) | 添加拦截器 |
boolean | isChecked(Object,ViewHolder) | 判断当前实例是否选中 |
boolean | hasChecked() | 判断是否至少选中一个 |
void | add(Object) | 添加默认选中 |
void | remove(Object) | 删除选中 |
T | getChecked() | 获取全部选中 |
返回值 | 方法 | 说明 |
---|---|---|
void | setCanCancel(booleanl) | 设置是否能够取消 |
返回值 | 方法 | 说明 |
---|---|---|
Set | getChecked(Class) | 获取指定类型的全部选中 |
boolean | isAllChecked(List<?>) | 指定列表是否所有选中 |
boolean | isAllChecked(List<?>, Class) | 指定列表里面的指定类型是否所有选中 |
void | checkAll(Map<?,ViewHolder>) | 选择所有(指定数据) |
void | checkAll(List<?>, Adapter) | 选择所有(指定数据) |
void | unCheckAll(Adapter adapter) | 取消所有选中 |
void | unCheckAll(Adapter adapter, Class, List) | 取消所有选中(指定数据) |
void | unCheckAll(Adapter, Class) | 取消所有选中(指定数据,指定类型) |
written by gminibirdgradle
源码戳上面 ^^^ui
- 曾荣基:广州芦苇科技 APP 团队 Android 开发工程师
- 咱们正在招募小伙伴,有兴趣的小伙伴能够把简历发到 app@talkmoney.cn,备注:来自掘金社区
- 详情能够戳这里--> 广州芦苇信息科技