前言:在上一篇文章中介绍了自定义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); }
注:以上代码的增删都是在上一篇文章的代码基础上进行的操作。
如有任何疑问,欢迎留言及评论,谢谢!!!