前言:在上一篇文章中介绍了自定义PopupWindow实现流式布局效果的筛选控件,基本的效果已经实现。但本人在项目中使用时发现了一个小Bug(可能也不算bug,不过使用返回的筛选条件时可能会麻烦点,需要自己设置未点击的tab对应的请求参数,如果未作处理就会默认上次的请求参数),就是在自定义PopupWindow的监听接口返回数据时,未被点击的tab不会添加数据到返回的数据列表中,即不会添加默认选中的各tab“不限”数据。
1.bug修复
(1)将之前的默认选中第一项代码
//设置默认选中第一个
if (i==0) {
//每个tab的第一个设置为选中
label.setSelected(true);
//记录选中的tab值
model.setTab(tab);
}
替换为:
//设置默认选中第一个
if (i==0) {
//每个tab的第一个设置为选中
label.setSelected(true);
//记录选中的tab值
model.setTab(tab);
//新增未点击筛选条件,返回默认的各tab的"不限"选项
labelLists.add(model.getTypeName()+"-"+tab.name);
}
(2)将之前各tab的label标签点击事件中的代码
if (tab != model.getTab()){
Log.e("rcw","index--->"+getIndex(model,labelIndex));
//清空上次选中的状态
mGridLayout.getChildAt(getIndex(model,labelIndex)).setSelected(false);
//设置当前点击选中的tab值
model.setTab(tab);
label.setSelected(true);
String labelText=label.getText().toString();
labelLists.add(model.getTypeName()+"-"+labelText);
Log.e("rcw","labelText--->"+model.getTypeName()+"-"+labelText);
}
替换为:
if (tab != model.getTab()){
Log.e("rcw","index--->"+getIndex(model,labelIndex));
//清空上次选中的状态
mGridLayout.getChildAt(getIndex(model,labelIndex)).setSelected(false);
//设置当前点击选中的tab值
model.setTab(tab);
label.setSelected(true);
String labelText=label.getText().toString();
//解决tab未被点击时 ,不添加默认的“不限”数据到集合中
int flag=-1;//用于记录需要替换的位置
for (int i=0;i<labelLists.size();i++){
String tvDes=labelLists.get(i);
//判断当前集合中是否包含TypeName
if (tvDes.contains(model.getTypeName())){
flag=i;
}
}
if (flag!=-1){
//先删除返回数据集合中的之前选中的
labelLists.remove(flag);
//添加当前选中的数据到集合
labelLists.add(flag,model.getTypeName()+"-"+labelText);
}
//labelLists.add(model.getTypeName()+"-"+labelText);
Log.e("rcw","labelText--->"+model.getTypeName()+"-"+labelText);
}
2.设置不默认选中
由于公司项目设计时要求每次进入筛选时都默认选中"不限"(可能你们叫“全部”或其它等),也许你们可能要求每次进入筛选条件选择时,记录上次选中的位置,你只需要注释掉和添加以下代码即可。
(1)需要注释掉的代码(addTabs方法中)
//设置默认选中第一个
if (i==0) {
//每个tab的第一个设置为选中
label.setSelected(true);
//记录选中的tab值
model.setTab(tab);
}
(2)添加代码处(addTabs方法中):
//记录上次选中状态
if (tabs.get(i) == model.getTab()){
label.setSelected(true);
labelLists.add(model.getTypeName()+"-"+tab.name);
}
(3)修改添加代码处(addTabs方法中的label标签的点击事件中)
if (tab != model.getTab()){
Log.e("rcw","index--->"+getIndex(model,labelIndex));
//清空上次选中的状态
mGridLayout.getChildAt(getIndex(model,labelIndex)).setSelected(false);
//设置当前点击选中的tab值
model.setTab(tab);
label.setSelected(true);
String labelText=label.getText().toString();
//解决tab未被点击时 ,不添加默认的“不限”数据到集合中
int flag=-1;//用于记录需要替换的位置
if (labelLists.size()!=0){
for (int i=0;i<labelLists.size();i++){
String tvDes=labelLists.get(i);
//判断当前集合中是否包含TypeName
if (tvDes.contains(model.getTypeName())){
flag=i;
break;//匹配成功,跳出循环
}else {
flag=-1;
}
}
if (flag!=-1){
//先删除返回数据集合中的之前选中的
labelLists.remove(flag);
//添加当前选中的数据到集合
labelLists.add(flag,model.getTypeName()+"-"+labelText);
}else {
labelLists.add(model.getTypeName()+"-"+labelText);
}
}else {
labelLists.add(model.getTypeName()+"-"+labelText);
}
//labelLists.add(model.getTypeName()+"-"+labelText);
Log.e("rcw","labelText--->"+model.getTypeName()+"-"+labelText);
}
注:以上代码的增删都是在上一篇文章的代码基础上进行的操作。
如有任何疑问,欢迎留言及评论,谢谢!!!