PopsTabView

Project Url: ccj659/PopsTabView
Introduction: PopsTabView 是个 filter 容器,他可以自动,快速,构建不同筛选样式,自由组合成一组 tab.目前版本,支持 单列单选,双列单选,复杂筛选.后续筛选会不断完善补充.
More: Author   ReportBugs   DemoAPK   
Tags:
PopWindow-Filter-筛选器-双列选择器-复杂筛选-

Download Download Author License

PopsTabView 是个 filter 容器,他可以自动,快速,构建不同筛选样式,自由组合成一组 tab.


更新日志

v 1.5.0 单项列表(仅限SingleFilterWindow,RowsFilterWindow)

  • issues需求,修复多选会弹回问题.
  • issues需求,增加可默认选项(可默认选中多个).

筛选样式 筛选种类 可自定义属性
单列 单选,多选 初始数据 bean,筛选结果 bean,tab 样式,筛选样式
多排 单选,多选 初始数据 bean,筛选结果 beantab 样式,筛选样式
双列 单项单选,单项多选 初始数据 bean,筛选结果 bean,tab 样式,筛选样式
复杂 单项单选,单项多选 初始数据 bean,筛选结果 bean,tab 样式,筛选样式
自定义 单项单选,单项多选 初始数据 bean,筛选结果 bean,tab 样式,筛选样式

详情请参考代码,以及实例 后续筛选会不断完善补充.

PopTabView.java API

方法名 功能 是否必须
setOnPopTabSetListener() 外部回调的监听
setPopEntityLoader() 筛选样式加载类,新增类型可在此扩展
setResultLoader() 结果集加载器,可自定义进行配置
addFilterItem() 增加筛选项
setClickedItem() 设置默认选中的状态,并主动回调 v1.5.0 新增
setDefaultCheckedItems() 设置默认选中,不会触发 OnPopSet()回调
removeItem() 清空容器

项目地址传送门 https://github.com/ccj659/PopsTabView

进阶

Show

两个筛选菜单 四个筛选菜单

两个筛选菜单 四个筛选菜单

Introduction

用户只需要,知道自己需要哪种 filter,将数据转化FilterTabBean,然后addFilterItem(),最后自己在onPopTabSet()回调,即可使用,简单粗暴.

优点:

  • 支持快速,构建不同筛选样式,顺序,自由组合成一组 filter 的 tab.
  • 用接口抽象出 filter 样式配置器 loader,与功能代码解耦.
  • 支持自定义配置 筛选结果ResultLoader<T>
  • 支持自定义数据 bean.
  • 可以自由扩展,其他类型的 Filter 类型.

待完善:

  • 逐渐增加其他类型的筛选样式
  • view 的样式可配置为可自定义

TO USE

添加依赖

In Gradle

compile 'me.ccj.PopsTabView:poptabview_lib:1.5.0'

In Maven

<dependency>
  <groupId>me.ccj.PopsTabView</groupId>
  <artifactId>poptabview_lib</artifactId>
  <version>1.5.0</version>
  <type>pom</type>
</dependency>

简单方式

如果业务需求很简单,用 lib 自带的筛选即可.

1.设定,筛选器类型. 将PopTypeLoader暴露,用于用户 筛选器类型.

需要自己按照该模式进行扩展.创建 具体 popwindow 实体对象. 创建对象和 功能代码解耦和,细节在PopTabView.addItem()中.若有需要,需要自由扩展,配置.


public class PopTypeLoaderImp implements PopTypeLoader {
    @Override
    public PopupWindow getPopEntity(Context context, List data, OnMultipeFilterSetListener filterSetListener, int tag, int type) {
        PopupWindow popupWindow = null;
        switch (tag) {
            case FilterConfig.TYPE_POPWINDOW_LINKED:
                popupWindow = new LinkFilterPopupWindow(context, data, filterSetListener,type);
                break;
            case FilterConfig.TYPE_POPWINDOW_SORT:
                popupWindow = new SortPopupWindow(context, data, filterSetListener, tag,type);
                break;
            default:
                popupWindow = new MSingleFilterWindow(context, data, filterSetListener,type);
                break;
        }
        return popupWindow;
    }
}

2.使用方式

2.1 Builder 模式,完成筛选器的创建.



    private void addMyMethod() {

        FilterGroup filterGroup1 = getMyData("筛选 1", FilterConfig.TYPE_POPWINDOW_ROWS,FilterConfig.FILTER_TYPE_SINGLE);
        FilterGroup filterGroup2 = getMyData("筛选 2", FilterConfig.TYPE_POPWINDOW_LINKED,FilterConfig.FILTER_TYPE_MUTIFY);
        FilterGroup filterGroup3 = getMyData("筛选 3", FilterConfig.TYPE_POPWINDOW_SINGLE,FilterConfig.FILTER_TYPE_SINGLE);
        FilterGroup filterGroup4 = getMyData("筛选 4", FilterConfig.TYPE_POPWINDOW_SORT,FilterConfig.FILTER_TYPE_MUTIFY);


        popTabView.setOnPopTabSetListener(this)
                .setPopEntityLoader(new PopEntityLoaderImp()).setResultLoader(new ResultLoaderImp()) //配置 {筛选类型}  方式

             /***
             * @param title 筛选标题
             * @param data 筛选数据
             * @param tag 筛选类别- 一级筛选,二级筛选,复杂筛选
             * @param type 筛选方式-单选 or 多选
             * @return
             */
                .addFilterItem(filterGroup1.getTab_group_name(), filterGroup1.getFilter_tab(), filterGroup1.getTab_group_type(), filterGroup1.getSingle_or_mutiply())
                .addFilterItem(filterGroup2.getTab_group_name(), filterGroup2.getFilter_tab(), filterGroup2.getTab_group_type(), filterGroup2.getSingle_or_mutiply())
                .addFilterItem(filterGroup3.getTab_group_name(), filterGroup3.getFilter_tab(), filterGroup3.getTab_group_type(), filterGroup3.getSingle_or_mutiply())
                .addFilterItem(filterGroup4.getTab_group_name(), filterGroup4.getFilter_tab(), filterGroup4.getTab_group_type(), filterGroup4.getSingle_or_mutiply());

    }

3.配置筛选后的返回值样式ResultLoader<T>



/**
 * 如果 遇到复杂的 业务需求, 只需要在这里,对筛选结果进行构建即可.
 * Created by chenchangjun on 17/7/25. */

public class ResultLoaderImp implements ResultLoader<String> {


    @Override
    public String getResultParamsIds(List<BaseFilterTabBean> selectedList, int filterType) {
        StringBuilder stringValues = new StringBuilder();
        for (int i = 0; i < selectedList.size(); i++) {
            FilterTabBean filterTabBean= (FilterTabBean) selectedList.get(i);
            stringValues.append( filterTabBean.getTab_id()+ ",");
        }
        return PopsTabUtils.builderToString(stringValues);
    }

    @Override
    public String getResultShowValues(List<BaseFilterTabBean> selectedList, int filterType) {

        StringBuilder stringValues = new StringBuilder();
        for (int i = 0; i < selectedList.size(); i++) {
            stringValues.append(selectedList.get(i).getTab_name() + ",");
        }
        return PopsTabUtils.builderToString(stringValues);
    }

4.成功的回调,可配置为借口传参.此处回调,可以自主修改,扩展.

 /**
     * @param index  操作的 filter 的下标号 0.1.2.3
     * @param lable  操作的 filter 的对应的标签 title
     * @param params 选中的 参数(需要传参)
     * @param value  选中的 值
     */
    @Override
    public void onPopTabSet(int index, String lable, String params, String value) {

        Toast.makeText(this, "lable=" + index + "\n&value=" + value, Toast.LENGTH_SHORT).show();
        tv_content.setText("&筛选项=" + index + "\n&筛选传参=" + params + "\n&筛选值=" + value);

    }

进阶用法

混淆规则

-dontwarn com.ccj.poptabview.**
-keep class com.ccj.poptabview.**{*;}

About Me

===

CSDN:http://blog.csdn.net/ccj659/article/

简书:http://www.jianshu.com/u/94423b4ef5cf

github: https//github.com/ccj659/

我的微信

image.png

Apps
About Me
GitHub: Trinea
Facebook: Dev Tools