美文网首页
Android自定义PopupWindow实现流式布局筛选控件(

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

作者: ruancw | 来源:发表于2018-06-03 16:23 被阅读252次

    前言:在上一篇文章中介绍了自定义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); 
    }
    

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

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

    相关文章

      网友评论

          本文标题:Android自定义PopupWindow实现流式布局筛选控件(

          本文链接:https://www.haomeiwen.com/subject/aobjsftx.html