Android自定义PopupWindow实现流式布局筛选控件(二)

前言:在上一篇文章中介绍了自定义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"+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"+model.getTypeName()+"-"+labelText); 
}

注:以上代码的增删都是在上一篇文章的代码基础上进行的操作。

如有任何疑问,欢迎留言及评论,谢谢!!!

你可能感兴趣的:(Android自定义PopupWindow实现流式布局筛选控件(二))