PopsTabView是個filter容器,他可以自動,快速,構建不同篩選樣式,自由組合成一組tab.
篩選樣式 | 篩選種類 | 可自定義屬性 | |
---|---|---|---|
單列 | 單選,多選 | 初始數據bean,篩選結果bean,tab樣式,篩選樣式 | |
多排 | 單選,多選 | 初始數據bean,篩選結果beantab樣式,篩選樣式 | |
雙列 | 單項單選,單項多選 | 初始數據bean,篩選結果bean,tab樣式,篩選樣式 | |
復雜 | 單項單選,單項多選 | 初始數據bean,篩選結果bean,tab樣式,篩選樣式 | |
自定義 | 單項單選,單項多選 | 初始數據bean,篩選結果bean,tab樣式,篩選樣式 |
詳情請參考代碼,以及實例
后續篩選會不斷完善補充.
PopTabView.java
API
方法名 | 功能 | 是否必須 | |
---|---|---|---|
setOnPopTabSetListener() | 外部回調的監聽 | 是 | |
setPopEntityLoader() | 篩選樣式加載類,新增類型可在此擴展 | 否 | |
setResultLoader() | 結果集加載器,可自定義進行配置 | 是 | |
addFilterItem() | 增加篩選項 | 是 | |
setClickedItem() | 設置默認選中的狀態,并主動回調 | 否 | |
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.4.0'復制代碼
In Maven
<dependency><groupId>me.ccj.PopsTabView</groupId><artifactId>poptabview_lib</artifactId><version>1.4.0</version><type>pom</type>
</dependency>復制代碼
簡單方式
如果業務需求很簡單,用lib自帶的篩選即可.
1.設定,篩選器類型. 將PopTypeLoader
暴露,用于用戶 篩選器類型.
需要自己按照該模式進行擴展.創建 具體 popwindow 實體對象. 創建對象和 功能代碼解耦和,細節在PopTabView.addItem()
中.若有需要,需要自由擴展,配置.
public class PopTypeLoaderImp implements PopTypeLoader {@Overridepublic 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> {@Overridepublic 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);}@Overridepublic 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 選中的 值*/@Overridepublic 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);}復制代碼
進階用法
自定義參數傳送門
自定義樣式傳送門
樣式調整--待優化
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/