资讯专栏INFORMATION COLUMN

Filter容器--PopsTabView

liuchengxu / 1347人阅读

摘要:是个容器他可以自动快速构建不同筛选样式自由组合成一组目前版本筛选样式筛选种类单列单选多选三行单选多选双列单选多选复杂单项单选单项多选后续筛选会不断完善补充项目地址传送门用户只需要知道自己需要哪种将数据转化然后最后自己在回调即可使用简单粗暴优

PopsTabView

===

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

目前版本v1.1

筛选样式 筛选种类
单列 单选,多选
三行 单选,多选
双列 单选,多选
复杂 单项单选,单项多选

后续筛选会不断完善补充.

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

Show

===

Introduction

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

优点:

支持用for()循环全自动配置,自动记住位置,并在点击时,返回位置以及选取值.

支持快速,构建不同筛选样式,自由组合成一组filter的tab.

支持自定义filter的顺序,选择样式.

解决Android版本兼容(解决popwindow显示位置偏差).

用接口抽象出filter样式配置器loader,与功能代码解耦.

支持自定义配置 筛选过程ResultLoader

可以自由扩展,其他类型的Filter类型.

待完善:

增加其他类型的筛选样式

回调参数,需待调整

view的样式可配置为可自定义

代码冗余还需优化.

TO USE

===

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模式,完成筛选器的创建.
        popTabView.setOnPopTabSetListener(this)
                .setPopEntityLoader(new PopTypeLoaderImp()) //配置 {筛选类型}  方式
                .addFilterItem("筛选1", singleFilterList1.getFilter_tab(), singleFilterList1.getTab_group_type(), FilterConfig.FILTER_TYPE_MUTIFY)
                .addFilterItem("筛选2", linkFilterList.getFilter_tab(), linkFilterList.getTab_group_type(), FilterConfig.FILTER_TYPE_MUTIFY)
                .addFilterItem("筛选3", singleFilterList2.getFilter_tab(), singleFilterList2.getTab_group_type(), FilterConfig.FILTER_TYPE_MUTIFY)
                .addFilterItem("筛选4", sortFilterList.getFilter_tab(), sortFilterList.getTab_group_type(), FilterConfig.FILTER_TYPE_MUTIFY);
2.2 for()循环全自动配置模式,完成筛选器的创建.
  /**
             *
             * @param title 筛选标题
             * @param data 筛选数据
             * @param tag 筛选类别- 一级筛选,二级筛选,复杂筛选
             * @param type 筛选方式-单选or多选
             * @return
             */
            popTabView.addFilterItem("筛选" + i, singleFilterList1.getFilter_tab(), singleFilterList1.getTab_group_type(), FilterConfig.FILTER_TYPE_SINGLE);
3.配置筛选后的返回值样式ResultLoader

public class ResultLoaderImp implements ResultLoader {


    @Override
    public String getResultParamsIds(List selectedList) {


        StringBuilder stringIds =new StringBuilder();

        for (int i = 0; i < selectedList.size(); i++) {
            stringIds.append(selectedList.get(i).getTab_id()+",");
        }

        return  builderToString(stringIds);
    }

    @Override
    public String getResultShowValues(List selectedList) {

        StringBuilder stringValues =new StringBuilder();

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

        return 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 + "
&value=" + value, Toast.LENGTH_SHORT).show();
        tv_content.setText("&筛选项=" + index + "
&筛选传参=" + params + "
&筛选值=" + value);

    }
样式调整--待优化

1.可在各级Adapter.ViewHolder 中自己定义.

2.可在xml文件中自定义修改

3.O__O "….....好吧,还是我太懒了....以后会补充的~~

About Me

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

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

github: https//github.com/ccj659/

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/14471.html

相关文章

  • Android开源项目

    摘要:几个不错的开源音视频播放器整理了一下上几个开源的音视频播放器项目,有兴趣的同学可以代码去研究学习。项目地址淘宝开源的一款的扩展是一个针对的扩展主要提供一整套布局方案和布局间的组件复用的问题。 PopsTabView--filter容器 PopsTabView是个filter容器,他可以自动,快速,构建不同筛选样式,自由组合成一组tab. 后续筛选会不断完善补充. 用户只需要,知道自己需...

    honhon 评论0 收藏0
  • 大话React-Redux

    摘要:一组件将所有组件分成两大类组件和容器组件。前者负责与外部的通信,将数据传给后者,由后者渲染出视图。也就是说,用户负责视觉层,状态管理则是全部交给它。前者需要从计算得到,后者需要向外发出。最后,生成对象,并使用在根组件外面包一层。 一、UI 组件 React-Redux 将所有组件分成两大类:UI 组件(presentational component)和容器组件(container c...

    huangjinnan 评论0 收藏0
  • 『SpringMVC』<context:include-filter>&<

    摘要:现在给定一个项目的包结构在中有以下配置只扫描注解可以看出要把最后的包写上,不能包含子包,所以不能写成。   大家好,我是猪弟,猪在我心中从来不是蠢的代名词,而是懒的代名词,本次准备记录一个在开发测试过程中遇到的问题,跟踪了三天spring和第三方RPC组件的源码,最终发现了问题是因为第三方组件没有处理好而父子容器导致的,还有一个因素是spring注解扫描重叠。 Spring版本:4.3...

    darryrzhong 评论0 收藏0
  • redux —— 入门实例 TodoList

    摘要:入门实例前端技术真是日新月异,搞完不搭配个数据流都不好意思了。关于的用法,这只是基础入门的部分,还有的多的搞基操作,比如异步数据流和配合。 redux —— 入门实例 TodoListshowImg(https://segmentfault.com/img/bVtSeH); Tip 前端技术真是日新月异,搞完 React 不搭配个数据流都不好意思了。满怀期待的心去翻了翻 flux,简直...

    SKYZACK 评论0 收藏0
  • Spring中Filter和Interceptor的区别

    摘要:有如下几个种类用户授权检查用户请求,根据请求过滤用户非法请求日志记录某些特殊的用户请求解码对非标准编码的请求解码。和的区别是基于函数回调方法的,而则是基于反射的思想。依赖于容器,而不依赖于容器。对几乎所有的请求起作用,而只能对请求起作用。 showImg(https://user-gold-cdn.xitu.io/2019/4/2/169dd72a88014f0d?w=804&h=49...

    fancyLuo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<