├── .gitattributes
├── .gitignore
├── MultiMenuSelectDemo
├── .gitignore
├── .idea
│ ├── .name
│ ├── compiler.xml
│ ├── copyright
│ │ └── profiles_settings.xml
│ ├── encodings.xml
│ ├── gradle.xml
│ ├── misc.xml
│ ├── modules.xml
│ ├── scopes
│ │ └── scope_settings.xml
│ └── vcs.xml
├── MultiMenuSelectDemo.iml
├── app
│ ├── .gitignore
│ ├── app.iml
│ ├── build.gradle
│ ├── proguard-rules.pro
│ └── src
│ │ └── main
│ │ ├── AndroidManifest.xml
│ │ ├── assets
│ │ └── position_function.txt
│ │ ├── java
│ │ └── com
│ │ │ └── mulitmenuselect
│ │ │ └── demo
│ │ │ ├── HomeActivity.java
│ │ │ ├── MainActivity.java
│ │ │ ├── adapter
│ │ │ ├── DictDialogAdapter.java
│ │ │ ├── MyPagerAdapter.java
│ │ │ └── ViewHolder.java
│ │ │ ├── dialog
│ │ │ ├── DictDataManager.java
│ │ │ ├── DictUnit.java
│ │ │ ├── DictUtil.java
│ │ │ ├── MultiDialog.java
│ │ │ └── ThirdDialog.java
│ │ │ └── widget
│ │ │ └── MyViewPager.java
│ │ └── res
│ │ ├── anim
│ │ ├── attention_guide_in.xml
│ │ └── attention_guide_out.xml
│ │ ├── drawable-hdpi
│ │ └── ic_launcher.png
│ │ ├── drawable-mdpi
│ │ └── ic_launcher.png
│ │ ├── drawable-xhdpi
│ │ ├── ic_launcher.png
│ │ ├── select_gray.9.png
│ │ └── select_white.9.png
│ │ ├── drawable-xxhdpi
│ │ └── ic_launcher.png
│ │ ├── layout
│ │ ├── activity_home.xml
│ │ ├── activity_main.xml
│ │ ├── layout_dialog.xml
│ │ ├── layout_dict_item.xml
│ │ ├── layout_dictdialog_container.xml
│ │ └── page1.xml
│ │ ├── menu
│ │ └── menu_main.xml
│ │ ├── values-w820dp
│ │ └── dimens.xml
│ │ └── values
│ │ ├── color.xml
│ │ ├── dimens.xml
│ │ ├── strings.xml
│ │ └── styles.xml
├── build.gradle
├── gradle.properties
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
├── README.md
└── image
└── screenshot.gif
/.gitattributes:
--------------------------------------------------------------------------------
1 | # Auto detect text files and perform LF normalization
2 | * text=auto
3 |
4 | # Custom for Visual Studio
5 | *.cs diff=csharp
6 |
7 | # Standard to msysgit
8 | *.doc diff=astextplain
9 | *.DOC diff=astextplain
10 | *.docx diff=astextplain
11 | *.DOCX diff=astextplain
12 | *.dot diff=astextplain
13 | *.DOT diff=astextplain
14 | *.pdf diff=astextplain
15 | *.PDF diff=astextplain
16 | *.rtf diff=astextplain
17 | *.RTF diff=astextplain
18 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Windows image file caches
2 | Thumbs.db
3 | ehthumbs.db
4 |
5 | # Folder config file
6 | Desktop.ini
7 |
8 | # Recycle Bin used on file shares
9 | $RECYCLE.BIN/
10 |
11 | # Windows Installer files
12 | *.cab
13 | *.msi
14 | *.msm
15 | *.msp
16 |
17 | # Windows shortcuts
18 | *.lnk
19 |
20 | # =========================
21 | # Operating System Files
22 | # =========================
23 |
24 | # OSX
25 | # =========================
26 |
27 | .DS_Store
28 | .AppleDouble
29 | .LSOverride
30 |
31 | # Thumbnails
32 | ._*
33 |
34 | # Files that might appear on external disk
35 | .Spotlight-V100
36 | .Trashes
37 |
38 | # Directories potentially created on remote AFP share
39 | .AppleDB
40 | .AppleDesktop
41 | Network Trash Folder
42 | Temporary Items
43 | .apdisk
44 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/.gitignore:
--------------------------------------------------------------------------------
1 | .gradle
2 | /local.properties
3 | /.idea/workspace.xml
4 | /.idea/libraries
5 | .DS_Store
6 | /build
7 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/.idea/.name:
--------------------------------------------------------------------------------
1 | MultiMenuSelectDemo
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/.idea/copyright/profiles_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/.idea/encodings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 | Android Lint
18 |
19 |
20 | Gradle
21 |
22 |
23 | Probable bugsGradle
24 |
25 |
26 |
27 |
28 | Abstraction issues
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 | localhost
132 | 5050
133 |
134 |
135 |
136 |
137 |
138 |
139 | 1.7
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/.idea/scopes/scope_settings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/MultiMenuSelectDemo.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/app.iml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.application'
2 |
3 | android {
4 | compileSdkVersion 21
5 | buildToolsVersion "21.1.2"
6 |
7 | defaultConfig {
8 | applicationId "com.mulitmenuselect.demo"
9 | minSdkVersion 8
10 | targetSdkVersion 21
11 | versionCode 1
12 | versionName "1.0"
13 | }
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | }
21 |
22 | dependencies {
23 | compile fileTree(dir: 'libs', include: ['*.jar'])
24 | compile 'com.android.support:appcompat-v7:21.0.3'
25 | }
26 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # By default, the flags in this file are appended to flags specified
3 | # in D:\Program Files\android\android-sdk-windows/tools/proguard/proguard-android.txt
4 | # You can edit the include path and order by changing the proguardFiles
5 | # directive in build.gradle.
6 | #
7 | # For more details, see
8 | # http://developer.android.com/guide/developing/tools/proguard.html
9 |
10 | # Add any project specific keep options here:
11 |
12 | # If your project uses WebView with JS, uncomment the following
13 | # and specify the fully qualified class name to the JavaScript interface
14 | # class:
15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
16 | # public *;
17 | #}
18 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
10 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/assets/position_function.txt:
--------------------------------------------------------------------------------
1 | 0,不限,0;
2 | 310000,IT/互联网/软件/通信,0;
3 | 310100,产品,310000;
4 | 310101,产品专员/产品助理,310100;
5 | 310102,产品经理/高级产品经理,310100;
6 | 310103,产品总监/副总监,310100;
7 | 310104,产品VP/首席产品官,310100;
8 | 310105,其他产品类职位,310100;
9 | 310200,设计,310000;
10 | 310201,网页设计/网站美工,310200;
11 | 310202,APP设计,310200;
12 | 310203,UI/UE/交互设计,310200;
13 | 310204,Flash/多媒体设计,310200;
14 | 310205,游戏设计,310200;
15 | 310206,设计经理/主美,310200;
16 | 310207,设计总监/副总监,310200;
17 | 310208,其他设计类职位,310200;
18 | 310300,编程/IT研发,310000;
19 | 310301,软件工程师,310300;
20 | 310302,前端工程师,310300;
21 | 310303,后端工程师,310300;
22 | 310304,APP开发工程师,310300;
23 | 310305,游戏开发工程师,310300;
24 | 310306,算法工程师,310300;
25 | 310307,大数据工程师,310300;
26 | 310308,云计算工程师,310300;
27 | 310309,需求工程师,310300;
28 | 310310,架构师,310300;
29 | 310311,技术经理/IT项目经理,310300;
30 | 310312,技术总监/IT项目总监,310300;
31 | 310313,技术VP/CTO/CIO,310300;
32 | 310314,Java开发,310300;
33 | 310315,.NET开发,310300;
34 | 310316,Php开发,310300;
35 | 310317,C/C++开发,310300;
36 | 310318,VC++开发,310300;
37 | 310319,C#开发,310300;
38 | 310320,Android开发,310300;
39 | 310321,iOS开发,310300;
40 | 310322,Flash开发,310300;
41 | 310323,Unity3d/U3D,310300;
42 | 310324,COCOS2D-X,310300;
43 | 310325,Python开发,310300;
44 | 310326,Delphi开发,310300;
45 | 310327,Flex开发,310300;
46 | 310328,Linux/Unix开发,310300;
47 | 310329,Windows开发,310300;
48 | 310330,其他研发类职位,310300;
49 | 310400,测试/QA,310000;
50 | 310401,测试工程师/测试员,310400;
51 | 310402,测试开发工程师,310400;
52 | 310403,产品评测/质量分析,310400;
53 | 310404,测试经理/QA主管,310400;
54 | 310405,测试总监/QA总监,310400;
55 | 310406,其他IT质量管理类职位,310400;
56 | 310500,IT运维/网络管理,310000;
57 | 310501,运维工程师,310500;
58 | 310502,网络工程师,310500;
59 | 310503,网络管理员/IT专员,310500;
60 | 310504,数据库工程师/DBA,310500;
61 | 310505,服务器工程师,310500;
62 | 310506,信息安全工程师,310500;
63 | 310507,IT设备管理/IT资源管理,310500;
64 | 310508,IT运维总监/运维经理,310500;
65 | 310509,其他运维类职位,310500;
66 | 310600,通信工程/物联网开发,310000;
67 | 310601,通信工程师,310600;
68 | 310602,移动通信/无线通信,310600;
69 | 310603,卫星通信/RS/GIS/GPS,310600;
70 | 310604,微波/射频/RFID/NFC,310600;
71 | 310605,有线通信/光纤通信,310600;
72 | 310606,传输/接入/交换技术,310600;
73 | 310607,信号处理/通信算法,310600;
74 | 310608,物联网工程师,310600;
75 | 310609,传感技术工程师,310600;
76 | 310610,通信工程项目经理,310600;
77 | 310611,其他通信研发类职位,310600;
78 | 310700,运营,310000;
79 | 310701,运营专员/助理,310700;
80 | 310702,内容运营/网站编辑,310700;
81 | 310703,信息审核员/鉴黄师,310700;
82 | 310704,产品运营,310700;
83 | 310705,用户运营/数据分析,310700;
84 | 310706,市场运营/活动运营,310700;
85 | 310707,电商运营/电子商务专员,310700;
86 | 310708,游戏运营,310700;
87 | 310709,网络推广/渠道拓展,310700;
88 | 310710,SEO/SEM,310700;
89 | 310711,运营经理/主管,310700;
90 | 310712,运营总监/COO,310700;
91 | 310713,其他运营类职位,310700;
92 | 320000,销售/客服/市场/公关,0;
93 | 320100,销售人员,320000;
94 | 320101,销售员/业务员,320100;
95 | 320102,销售代表/商务代表,320100;
96 | 320103,客户代表/KA销售,320100;
97 | 320104,销售顾问/商务顾问,320100;
98 | 320105,销售工程师,320100;
99 | 320106,电话销售/坐席代表,320100;
100 | 320107,网络/在线销售,320100;
101 | 320108,会议/会展/活动销售,320100;
102 | 320109,渠道销售,320100;
103 | 320110,区域销售,320100;
104 | 320111,业务拓展/BD专员,320100;
105 | 320112,招商专员/助理,320100;
106 | 320113,分销员/经销员/代理,320100;
107 | 320114,零售终端/直销员,320100;
108 | 320115,团购业务员,320100;
109 | 320116,销售管理培训生,320100;
110 | 320117,其他销售员类职位,320100;
111 | 320200,销售高级管理,320000;
112 | 320201,销售经理/主管,320200;
113 | 320202,销售总监,320200;
114 | 320203,客户经理/KA经理,320200;
115 | 320204,客户总监/KA总监,320200;
116 | 320205,业务拓展/BD经理,320200;
117 | 320206,业务拓展/BD总监,320200;
118 | 320207,经销商/代理商管理,320200;
119 | 320208,渠道销售总监/经理,320200;
120 | 320209,区域经理/大区经理,320200;
121 | 320210,区域总监/大区总监,320200;
122 | 320211,招商经理/主管,320200;
123 | 320212,招商总监,320200;
124 | 320213,团购总监/经理/主管,320200;
125 | 320214,零售/直销经理/主管,320200;
126 | 320215,零售终端/直销总监,320200;
127 | 320216,网络/在线销售总监/经理,320200;
128 | 320217,其他销售高级类职位,320200;
129 | 320300,商务/销售督导/销管,320000;
130 | 320301,商务专员/商务助理,320300;
131 | 320302,商务经理/主管,320300;
132 | 320303,商务总监,320300;
133 | 320304,招标/投标人员,320300;
134 | 320305,销售运营/业务分析,320300;
135 | 320306,销售督导/销售培训师,320300;
136 | 320307,销管专员/销售行政,320300;
137 | 320308,销管经理/销售行政经理,320300;
138 | 320309,其他销管类职位,320300;
139 | 320400,销售支持/客户服务,320000;
140 | 320401,销售支持专员/助理,320400;
141 | 320402,售前/售后支持工程师,320400;
142 | 320403,销售支持经理/主管,320400;
143 | 320404,销售支持总监,320400;
144 | 320405,客服专员/助理,320400;
145 | 320406,呼叫中心/电话客服,320400;
146 | 320407,网络/在线客服,320400;
147 | 320408,客户服务经理/主管,320400;
148 | 320409,客户服务总监,320400;
149 | 320410,其他服务支持类职位,320400;
150 | 320500,市场/渠道/促销,320000;
151 | 320501,市场专员/市场助理,320500;
152 | 320502,市场经理/市场主管,320500;
153 | 320503,市场总监,320500;
154 | 320504,市场策划/文案/企划,320500;
155 | 320505,策划经理/企划经理,320500;
156 | 320506,市场推广专员/助理,320500;
157 | 320507,市场推广经理/主管,320500;
158 | 320508,渠道专员/渠道助理,320500;
159 | 320509,渠道总监/渠道经理,320500;
160 | 320510,促销专员/助理,320500;
161 | 320511,促销经理/主管,320500;
162 | 320512,市场调研/分析,320500;
163 | 320513,其他市场营销类职位,320500;
164 | 320600,产品/品牌,320000;
165 | 320601,产品专员/品牌专员,320600;
166 | 320602,产品经理/品牌经理,320600;
167 | 320603,产品总监/品牌总监,320600;
168 | 320604,其他产品管理类职位,320600;
169 | 320700,公关/媒介,320000;
170 | 320701,公关专员/公关助理,320700;
171 | 320702,公关总监/公关经理,320700;
172 | 320703,媒介专员/媒介助理,320700;
173 | 320704,媒介总监/媒介经理,320700;
174 | 320705,其他公关媒介类职位,320700;
175 | 320800,会议/会展/活动,320000;
176 | 320801,会议/会展/活动策划,320800;
177 | 320802,会议/会展/活动执行,320800;
178 | 320803,会议/会展/活动经理,320800;
179 | 320804,会议/会展/活动总监,320800;
180 | 320805,其他活动类职位,320800;
181 | 330000,设计/广告/媒体/艺术,0;
182 | 330100,创意/策划/设计,330000;
183 | 330101,创意/策划/文案,330100;
184 | 330102,创意总监/创意经理,330100;
185 | 330103,策划总监/策划经理,330100;
186 | 330104,广告设计,330100;
187 | 330105,UI设计,330100;
188 | 330106,形象/造型/视觉设计,330100;
189 | 330107,平面设计/2D设计,330100;
190 | 330108,三维设计/3D设计,330100;
191 | 330109,插画/手绘/原画,330100;
192 | 330110,数字媒体艺术/多媒体制作,330100;
193 | 330111,展会/活动/舞美设计,330100;
194 | 330112,橱窗/展柜/陈列设计,330100;
195 | 330113,包装设计,330100;
196 | 330114,设计总监/经理/美术指导,330100;
197 | 330115,其他创意设计类职位,330100;
198 | 330200,广告销售/项目执行,330000;
199 | 330201,客户执行/AE,330200;
200 | 330202,广告客户总监/客户经理,330200;
201 | 330203,广告项目总监/项目经理,330200;
202 | 330204,广告销售专员/助理,330200;
203 | 330205,广告销售总监/经理,330200;
204 | 330206,其他广告类职位,330200;
205 | 330300,编辑/内容制作/后期,330000;
206 | 330301,编辑/记者/采编,330300;
207 | 330302,文案编辑/产品编辑,330300;
208 | 330303,美术编辑/修图师,330300;
209 | 330304,校对/排版,330300;
210 | 330305,视频/字幕/音频编辑,330300;
211 | 330306,作家/撰稿/写手,330300;
212 | 330307,编剧/文学统筹/影视策划,330300;
213 | 330308,栏目包装/后期制作/特效,330300;
214 | 330309,总编/主编,330300;
215 | 330310,导演/编导,330300;
216 | 330311,制作总监/制作经理,330300;
217 | 330312,其他编辑类职位,330300;
218 | 330400,出版/发行/影视运营,330000;
219 | 330401,出版/版权管理,330400;
220 | 330402,发行专员/助理,330400;
221 | 330403,发行经理/主管,330400;
222 | 330404,艺术/影视项目经理,330400;
223 | 330405,影院营运/放映管理,330400;
224 | 330406,影院经理/店长,330400;
225 | 330407,其他影视营销类职位,330400;
226 | 330500,艺术/表演/经纪,330000;
227 | 330501,艺术总监/艺术指导,330500;
228 | 330502,摄影/摄像/录音,330500;
229 | 330503,播音/主持/配音,330500;
230 | 330504,演艺人员/模特/礼仪,330500;
231 | 330505,演艺经纪人/星探,330500;
232 | 330506,化妆/造型/服装/道具,330500;
233 | 330507,其他演艺类职位,330500;
234 | 340000,教育/培训/翻译/科研,0;
235 | 340100,课程咨询/课程开发,340000;
236 | 340101,课程顾问/课程咨询师,340100;
237 | 340102,课程销售经理/主管,340100;
238 | 340103,招生专员/招生老师,340100;
239 | 340104,招生经理/主管/主任,340100;
240 | 340105,课程开发/培训策划,340100;
241 | 340106,在线教育产品经理,340100;
242 | 340107,培训项目执行/课程运营,340100;
243 | 340108,在线教育技术开发,340100;
244 | 340109,其他教育培训类职位,340100;
245 | 340200,教师/培训师,340000;
246 | 340201,培训师/讲师,340200;
247 | 340202,培训助理/助教,340200;
248 | 340203,班主任/学习管理/教务,340200;
249 | 340204,早教/幼教/学前教育,340200;
250 | 340205,小学教师/小升初辅导,340200;
251 | 340206,初中教师/中考辅导,340200;
252 | 340207,高中教师/高考辅导,340200;
253 | 340208,大学教师/考研辅导,340200;
254 | 340209,特殊教育老师,340200;
255 | 340210,音乐老师/舞蹈老师,340200;
256 | 340211,美术老师/艺术教师,340200;
257 | 340212,体育老师/运动教练,340200;
258 | 340213,校长/院长/园长,340200;
259 | 340214,其他教师类职位,340200;
260 | 340300,翻译/各语种职位,340000;
261 | 340301,翻译/翻译助理,340300;
262 | 340302,翻译经理/主管,340300;
263 | 340303,英语类,340300;
264 | 340304,日语类,340300;
265 | 340305,德语类,340300;
266 | 340306,法语类,340300;
267 | 340307,俄语类,340300;
268 | 340308,意大利语类,340300;
269 | 340309,西班牙语类,340300;
270 | 340310,葡萄牙语类,340300;
271 | 340311,阿拉伯语类,340300;
272 | 340312,韩语/朝鲜语类,340300;
273 | 340313,泰语类,340300;
274 | 340314,粤语及其他方言类,340300;
275 | 340315,其他语种类职位,340300;
276 | 340400,科研/实验室/学术研究,340000;
277 | 340401,课题研究员/实验室人员,340400;
278 | 340402,科研管理人员,340400;
279 | 340403,学术推广/学术代表,340400;
280 | 340404,其他科研类职位,340400;
281 | 350000,财会/银行/金融/保险,0;
282 | 350100,财务管理,350000;
283 | 350101,财务,350100;
284 | 350102,财务助理/财务文员,350100;
285 | 350103,财务经理/财务主管,350100;
286 | 350104,财务总监/首席财务官,350100;
287 | 350105,成本专员/预算专员,350100;
288 | 350106,成本经理/预算经理,350100;
289 | 350107,财务分析师/专员,350100;
290 | 350108,财务分析经理/主管,350100;
291 | 350109,资产管理专员/助理,350100;
292 | 350110,资产管理经理/主管,350100;
293 | 350111,其他财务管理类职位,350100;
294 | 350200,会计/结算/统计,350000;
295 | 350201,会计师/会计,350200;
296 | 350202,会计助理/会计文员,350200;
297 | 350203,会计经理/主管/总账会计,350200;
298 | 350204,结算专员/助理,350200;
299 | 350205,结算经理/主管,350200;
300 | 350206,统计专员/助理,350200;
301 | 350207,统计经理/主管,350200;
302 | 350208,其他会计类职位,350200;
303 | 350300,出纳/收银/资金管理,350000;
304 | 350301,出纳,350300;
305 | 350302,出纳经理/主管,350300;
306 | 350303,收银员,350300;
307 | 350304,收银经理/主管,350300;
308 | 350305,资金专员/助理,350300;
309 | 350306,资金经理/主管,350300;
310 | 350307,其他出纳类职位,350300;
311 | 350400,审计/税务/风险管理,350000;
312 | 350401,审计师/审计专员,350400;
313 | 350402,审计助理,350400;
314 | 350403,审计总监/经理/主管,350400;
315 | 350405,税务师/税务专员,350400;
316 | 350406,税务助理,350400;
317 | 350407,税务经理/主管,350400;
318 | 350408,稽核/合规/风险管理,350400;
319 | 350409,其他财会类职位,350400;
320 | 350500,银行/信贷,350000;
321 | 350501,银行柜员,350500;
322 | 350502,银行客服,350500;
323 | 350503,大堂经理,350500;
324 | 350504,综合业务,350500;
325 | 350505,公司金融业务,350500;
326 | 350506,小微金融业务,350500;
327 | 350507,个人金融业务,350500;
328 | 350508,银行卡/电子银行业务,350500;
329 | 350509,信贷专员/贷款专员,350500;
330 | 350510,信贷经理/贷款经理,350500;
331 | 350511,信审/资信评估,350500;
332 | 350512,催收经理/催收专员,350500;
333 | 350513,行长/银行部门经理,350500;
334 | 350514,其他银行类职位,350500;
335 | 350600,投融资/理财/金融市场,350000;
336 | 350601,投资顾问/理财顾问,350600;
337 | 350602,投资专员/投资助理,350600;
338 | 350603,投资总监/投资经理,350600;
339 | 350604,融资专员/融资助理,350600;
340 | 350605,融资总监/融资经理,350600;
341 | 350606,投资者关系/证券事务代表,350600;
342 | 350607,交易员/操盘手,350600;
343 | 350608,金融/证券经纪人,350600;
344 | 350609,金融/证券分析师,350600;
345 | 350610,基金经理/金融产品经理,350600;
346 | 350611,投行项目专员/助理,350600;
347 | 350612,投行总监/项目经理,350600;
348 | 350613,彩票/收藏/拍卖/典当,350600;
349 | 350614,其他投融资类职位,350600;
350 | 350700,保险,350000;
351 | 350701,保险产品设计/精算,350700;
352 | 350702,柜面客服/内勤/续期续保,350700;
353 | 350703,核保/定损/理赔,350700;
354 | 350704,财务规划师/保险业务员,350700;
355 | 350705,保险业务经理/团队主管,350700;
356 | 350706,其他保险类职位,350700;
357 | 360000,人力/行政/法律/咨询,0;
358 | 360100,人力资源/人才服务,360000;
359 | 360101,人力资源专员/人事助理,360100;
360 | 360102,人力资源经理/人事主管,360100;
361 | 360103,人力资源总监/人事总监,360100;
362 | 360104,招聘专员/助理,360100;
363 | 360105,招聘经理/主管,360100;
364 | 360106,薪酬绩效专员/助理,360100;
365 | 360107,薪酬绩效经理/主管,360100;
366 | 360108,培训专员/助理,360100;
367 | 360109,培训经理/主管,360100;
368 | 360110,企业文化/员工关系,360100;
369 | 360111,人力资源信息管理/eHR,360100;
370 | 360112,猎头服务/人才顾问,360100;
371 | 360113,其他人力资源类职位,360100;
372 | 360200,行政人员,360000;
373 | 360201,行政专员/行政助理,360200;
374 | 360202,秘书/文员/经理助理,360200;
375 | 360203,前台/接待/总机,360200;
376 | 360204,行政总监/行政经理,360200;
377 | 360205,其他行政类职位,360200;
378 | 360300,企业管理,360000;
379 | 360301,管理培训生/储备干部,360300;
380 | 360302,总裁秘书/总经理助理,360300;
381 | 360303,分公司经理/事业部负责人,360300;
382 | 360304,CEO/总经理/总裁/合伙人,360300;
383 | 360305,其他企业管理类职位,360300;
384 | 360400,法律/法务,360000;
385 | 360401,法务专员/法务助理,360400;
386 | 360402,法务总监/经理/主管,360400;
387 | 360403,法律顾问/律师/诉讼,360400;
388 | 360404,律师助理/非诉律师,360400;
389 | 360405,其他法律类职位,360400;
390 | 360500,知识产权,360000;
391 | 360501,知识产权专员/助理,360500;
392 | 360502,知识产权/专利工程师,360500;
393 | 360503,知识产权经理/主管,360500;
394 | 360504,商标顾问/商标代理,360500;
395 | 360505,专利顾问/专利代理,360500;
396 | 360506,其他知识产权类职位,360500;
397 | 360600,咨询/顾问,360000;
398 | 360601,咨询师/顾问,360600;
399 | 360602,咨询经理/顾问经理,360600;
400 | 360603,其他咨询顾问类职位,360600;
401 | 370000,建筑/房地产/物业管理,0;
402 | 370100,建筑/工程设计,370000;
403 | 370101,建筑设计,370100;
404 | 370102,室内设计,370100;
405 | 370103,园艺/园林/景观设计,370100;
406 | 370104,城市规划/设计,370100;
407 | 370105,动力/电气/照明设计,370100;
408 | 370106,空调/暖通设计,370100;
409 | 370107,给排水设计,370100;
410 | 370108,幕墙设计,370100;
411 | 370109,建筑设计总监/经理,370100;
412 | 370110,其他工程设计类职位,370100;
413 | 370200,建设工程,370000;
414 | 370201,总工/建筑工程师,370200;
415 | 370202,工程总监/项目经理,370200;
416 | 370203,工程造价/概预算,370200;
417 | 370204,结构/土木/土建工程师,370200;
418 | 370205,建筑机电工程师,370200;
419 | 370206,给水排水工程师,370200;
420 | 370207,空调/暖通工程师,370200;
421 | 370208,热力/燃气工程师,370200;
422 | 370209,幕墙工程师,370200;
423 | 370210,光源/照明工程师,370200;
424 | 370211,智能楼宇/综合布线,370200;
425 | 370212,装修工程管理,370200;
426 | 370213,市政/道路/桥梁工程,370200;
427 | 370214,交通/隧道/地铁工程,370200;
428 | 370215,线路/管道/设备工程,370200;
429 | 370216,城市绿化工程管理,370200;
430 | 370217,勘察设计/测绘测量,370200;
431 | 370218,工程施工员/安全员,370200;
432 | 370219,资料员/工程助理,370200;
433 | 370220,工程质量管理/验收,370200;
434 | 370221,工程监理/工程咨询,370200;
435 | 370222,其他工程类职位,370200;
436 | 370300,房地产/物业管理,370000;
437 | 370301,房地产开发/策划人员,370300;
438 | 370302,报批/报建人员,370300;
439 | 370303,房地产投资/房地产评估,370300;
440 | 370304,置业顾问/房地产经纪人,370300;
441 | 370305,房地产销售经理/主管,370300;
442 | 370306,物业管理员/接待/客服,370300;
443 | 370307,物业经理/主管,370300;
444 | 370308,其他房地产经营类职位,370300;
445 | 380000,物流/仓储/采购/贸易,0;
446 | 380100,物流管理/运输,380000;
447 | 380101,物流专员/助理,380100;
448 | 380102,物流工程师,380100;
449 | 380103,物流总监/经理/主管,380100;
450 | 380104,快递员/送货员,380100;
451 | 380105,货运代理,380100;
452 | 380106,海运/陆运/空运操作,380100;
453 | 380107,运输经理/主管,380100;
454 | 380108,其他物流类职位,380100;
455 | 380200,仓储/包装,380000;
456 | 380201,仓库管理/调度,380200;
457 | 380202,理货/分拣/包装,380200;
458 | 380203,仓库经理/主管,380200;
459 | 380204,其他仓管类职位,380200;
460 | 380300,贸易/采购,380000;
461 | 380301,外贸/贸易专员/助理,380300;
462 | 380302,跟单员/单证员,380300;
463 | 380303,报关员/报检员,380300;
464 | 380304,外贸/贸易经理/主管,380300;
465 | 380305,采购专员/助理/买手,380300;
466 | 380306,采购总监/采购经理,380300;
467 | 380307,其他贸易类职位,380300;
468 | 390000,生产管理/质量管理,0;
469 | 390100,产品工程/生产管理,390000;
470 | 390101,产品工程师/产品项目管理,390100;
471 | 390102,工业设计师/制图员,390100;
472 | 390103,工艺工程师,390100;
473 | 390104,工业工程师,390100;
474 | 390105,生产计划专员/生产助理,390100;
475 | 390106,生产/制造人员,390100;
476 | 390107,物料管理/物料控制,390100;
477 | 390108,生产主管/拉长/组长/领班,390100;
478 | 390109,厂长/工厂经理/车间主任,390100;
479 | 390110,其他生产管理类职位,390100;
480 | 390200,质量管理,390000;
481 | 390201,质检员/品管员/化验员,390200;
482 | 390202,质量工程师/品质管理师,390200;
483 | 390203,质量总监/品质经理,390200;
484 | 390204,QA/QC/测试/检验,390200;
485 | 390205,QA经理/QC经理,390200;
486 | 390206,计量工程师/技术员,390200;
487 | 390207,供应商质量管理/SQE,390200;
488 | 390208,质量体系/认证工程师,390200;
489 | 390209,技术服务/维修工程师,390200;
490 | 390210,技术服务/维修经理,390200;
491 | 390211,其他质量类职位,390200;
492 | 390300,安全/社会责任,390000;
493 | 390301,EHS工程师/专员,390300;
494 | 390302,EHS经理/主管,390300;
495 | 390303,其他EHS类职位,390300;
496 | 400000,电子/机械/能源/环保,0;
497 | 400100,电子/硬件/电气/智能,400000;
498 | 400101,电子工程师/技术员,400100;
499 | 400102,嵌入式软件工程师,400100;
500 | 400103,硬件开发/电路工程师,400100;
501 | 400104,电池/电源/变压器工程师,400100;
502 | 400105,电器工程师/技术员,400100;
503 | 400106,激光/光电技术,400100;
504 | 400107,电气工程师/技术员,400100;
505 | 400108,现场应用工程师/FAE,400100;
506 | 400109,其他电子电气类职位,400100;
507 | 400200,机械/设备/仪器仪表,400000;
508 | 400201,机械设计/机械工程师,400200;
509 | 400202,机械零部件设计,400200;
510 | 400203,设备工程师/机械维修,400200;
511 | 400204,设备经理/主管,400200;
512 | 400205,仪器仪表/自动化工程师,400200;
513 | 400206,CNC/数控工程师,400200;
514 | 400207,工装/模具工程师,400200;
515 | 400208,装配工程师/技术员,400200;
516 | 400209,包装工程师/技术员,400200;
517 | 400211,其他机械类职位,400200;
518 | 400300,汽车,400000;
519 | 400301,汽车设计,400300;
520 | 400302,汽车工程师,400300;
521 | 400303,汽车销售/经纪人,400300;
522 | 400304,汽车维修/保养/美容,400300;
523 | 400305,4S店经理/维修站经理,400300;
524 | 400306,车险/定损/理赔,400300;
525 | 400307,驾校教练/汽车代驾,400300;
526 | 400308,其他汽车类职位,400300;
527 | 400400,石油/水利/电力/能源工程,400000;
528 | 400401,能源工程师,400400;
529 | 400402,能源项目经理,400400;
530 | 400403,地质勘探/岩土工程,400400;
531 | 400404,煤炭/石油/天然气工程,400400;
532 | 400405,金属矿产开采/冶炼,400400;
533 | 400406,水文/水资源/水利工程,400400;
534 | 400407,电力/火力/核工程,400400;
535 | 400408,太阳能/光伏工程,400400;
536 | 400409,海洋工程,400400;
537 | 400410,新能源研发,400400;
538 | 400411,其他能源类职位,400400;
539 | 400500,环境/环保,400000;
540 | 400501,环保工程师/环评工程师,400500;
541 | 400502,废物处理工程师,400500;
542 | 400503,生态规划/生态治理,400500;
543 | 400504,环境管理/园林景区保护,400500;
544 | 400505,环境项目管理,400500;
545 | 400506,其他环境类职位,400500;
546 | 400600,飞行器/列车/船舶/军工,400000;
547 | 400601,飞行器/列车/船舶/军工设计,400600;
548 | 400602,飞行器/列车/船舶/军工制造,400600;
549 | 400603,其他设备制造类职位,400600;
550 | 410000,制药/医疗器械/化工,0;
551 | 410100,医药/医疗器械研发,410000;
552 | 410101,医药研发人员,410100;
553 | 410102,药物分析/质量检测,410100;
554 | 410103,临床研究/临床协调员,410100;
555 | 410104,医疗器械设研发人员,410100;
556 | 410105,生物工程/生物技术研发,410100;
557 | 410106,注册专员/助理,410100;
558 | 410107,注册经理/主管,410100;
559 | 410108,其他医药研发类职位,410100;
560 | 410200,医药销售/医疗器械销售,410000;
561 | 410201,医药代表/药品推广,410200;
562 | 410202,医药销售总监/经理,410200;
563 | 410203,医疗器械销售代表,410200;
564 | 410204,医疗器械销售总监/经理,410200;
565 | 410205,其他医药销售类职位,410200;
566 | 410300,化工/材料/造纸,410000;
567 | 410301,化工工程师,410300;
568 | 410302,无机化工/无机材料,410300;
569 | 410303,有机化工,410300;
570 | 410304,材料工程师,410300;
571 | 410305,造纸技术/纸品生产,410300;
572 | 410306,化学分析/化工操作,410300;
573 | 410307,其他化工类职位,410300;
574 | 420000,食品/饮料/服装/家居,0;
575 | 420100,食品/饮料,420000;
576 | 420101,食品研发/配方开发,420100;
577 | 420102,食品生产/食品安全,420100;
578 | 420103,饮料/酒品研制/生产,420100;
579 | 420104,食品/饮料销售,420100;
580 | 420105,其他食品类职位,420100;
581 | 420200,纺织/皮革/服装,420000;
582 | 420201,纺织/皮革/服装设计师,420200;
583 | 420202,纺织/皮革/服装加工生产,420200;
584 | 420203,纺织/皮革/服装跟单,420200;
585 | 420204,纺织/皮革/服装质量管理,420200;
586 | 420205,面料开发/面料采购,420200;
587 | 420206,纺织/皮革/服装销售,420200;
588 | 420207,其他纺织类职位,420200;
589 | 420300,家具/家居,420000;
590 | 420301,家具/家居设计师,420300;
591 | 420302,家具/家居用品生产,420300;
592 | 420303,家具/家居用品销售,420300;
593 | 420304,其他家居类职位,420300;
594 | 420400,工艺品/珠宝/其他商品,420000;
595 | 420401,玩具设计/工艺品设计,420400;
596 | 420402,玩具/工艺品生产,420400;
597 | 420403,玩具/工艺品销售,420400;
598 | 420404,珠宝设计/珠宝鉴定师,420400;
599 | 420405,珠宝顾问/珠宝销售,420400;
600 | 420406,其他商品类职位,420400;
601 | 430000,医疗/健康/餐饮/旅游,0;
602 | 430100,医疗/医生,430000;
603 | 430101,在线医生/医疗咨询,430100;
604 | 430102,综合门诊/急诊/全科医生,430100;
605 | 430103,内科医生,430100;
606 | 430104,外科医生,430100;
607 | 430105,妇产科医生,430100;
608 | 430106,儿科医生,430100;
609 | 430107,老年病科医生,430100;
610 | 430108,五官科医生,430100;
611 | 430109,牙医/口腔科医生,430100;
612 | 430110,眼科医生/验光师,430100;
613 | 430111,美容/整形科医生,430100;
614 | 430112,中医科医生,430100;
615 | 430113,神经科医生,430100;
616 | 430114,精神科医生,430100;
617 | 430115,心理医生/心理咨询师,430100;
618 | 430116,医学影像/核医学/放射科医生,430100;
619 | 430117,化验/检验科医生,430100;
620 | 430118,药房管理/药剂师,430100;
621 | 430119,麻醉医生,430100;
622 | 430120,病理科医师,430100;
623 | 430121,肿瘤科医生,430100;
624 | 430122,血库管理/医疗器械管理,430100;
625 | 430123,宠物医生/宠物美容,430100;
626 | 430124,其他医疗类职位,430100;
627 | 430200,护理/健康/运动,430000;
628 | 430201,营养师/健康顾问,430200;
629 | 430202,护士/护理人员,430200;
630 | 430203,理疗/针灸/推拿/运动医学,430200;
631 | 430204,美容顾问/彩妆顾问,430200;
632 | 430205,会籍顾问/健身顾问,430200;
633 | 430206,健身教练/户外领队,430200;
634 | 430207,游泳教练/救生员,430200;
635 | 430208,其他健康类职位,430200;
636 | 430300,酒店/餐饮/商超,430000;
637 | 430301,酒店管理/餐饮管理,430300;
638 | 430302,卖场管理/商超店长,430300;
639 | 430303,楼面管理/大堂经理,430300;
640 | 430304,品牌/连锁招商管理,430300;
641 | 430305,品类管理/采购管理,430300;
642 | 430306,厨师/面点师/食谱开发,430300;
643 | 430307,调酒师/茶艺师/咖啡师,430300;
644 | 430308,店员/营业员/理货/导购,430300;
645 | 430309,收银主管/收银员,430300;
646 | 430310,前台/接待/礼仪/迎宾,430300;
647 | 430311,酒店/餐饮/商超在线客服,430300;
648 | 430312,神秘顾客/试睡员,430300;
649 | 430313,其他零售服务类职位,430300;
650 | 430400,旅行/乘务/航空服务,430000;
651 | 430401,旅游顾问/旅游产品销售,430400;
652 | 430402,导游/讲解员,430400;
653 | 430403,旅游产品/线路策划/计调,430400;
654 | 430404,旅游项目管理/业务管理,430400;
655 | 430405,票务服务/签证服务,430400;
656 | 430406,乘务服务/地勤服务,430400;
657 | 430407,飞行员,430400;
658 | 430408,其他出行服务类职位,430400;
659 | 440000,农林牧渔/公务员/其他,0;
660 | 440100,农/林/牧/渔,440000;
661 | 440101,农林种植/植保/绿化技术,440100;
662 | 440102,农业/林业工程/农林管理,440100;
663 | 440103,动物养殖/兽医/畜牧工程,440100;
664 | 440104,动物营养/饲料研发,440100;
665 | 440105,水产养殖/捕捞/渔业工程,440100;
666 | 440106,其他农林牧渔类职位,440100;
667 | 440200,公务员/社工/其他,440000;
668 | 440201,公务员/行政事业单位人员,440200;
669 | 440202,社会工作/义工/志愿者,440200;
670 | 440203,自由职业者,440200;
671 | 440204,其他职类,440200;
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/HomeActivity.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo;
2 |
3 | import android.app.Activity;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 | import android.view.View;
7 | import android.widget.TextView;
8 |
9 | import com.mulitmenuselect.demo.dialog.DictUnit;
10 | import com.mulitmenuselect.demo.dialog.ThirdDialog;
11 |
12 | /**
13 | * Created by yuliang.zhao on 2015/3/18.
14 | */
15 | public class HomeActivity extends Activity {
16 | private static final int REQUEST_CODE = 100;
17 | private TextView tv1,tv2;
18 | @Override
19 | protected void onCreate(Bundle savedInstanceState) {
20 | super.onCreate(savedInstanceState);
21 | setContentView(R.layout.activity_home);
22 | tv1 = (TextView) findViewById(R.id.textview1);
23 | tv1.setOnClickListener(new View.OnClickListener() {
24 | @Override
25 | public void onClick(View v) {
26 | startActivityForResult(new Intent(HomeActivity.this, MainActivity.class),REQUEST_CODE);
27 | }
28 | });
29 | tv2 = (TextView) findViewById(R.id.textview2);
30 | tv2.setOnClickListener(new View.OnClickListener() {
31 | @Override
32 | public void onClick(View v) {
33 | ThirdDialog dialog=new ThirdDialog(HomeActivity.this);
34 | dialog.setonItemClickListener(new ThirdDialog.DictItemClickListener() {
35 | @Override
36 | public void onDictItemClick(DictUnit dictUnit) {
37 | if (dictUnit!=null)
38 | tv2.setText(dictUnit.name);
39 | }
40 | });
41 | dialog.show();
42 | }
43 | });
44 | }
45 |
46 | @Override
47 | protected void onActivityResult(int requestCode, int resultCode, Intent data) {
48 | super.onActivityResult(requestCode, resultCode, data);
49 | switch (requestCode){
50 | case REQUEST_CODE:
51 | if (data !=null){
52 | DictUnit dictUnit= (DictUnit) data.getSerializableExtra("dict");
53 | if (dictUnit!=null)
54 | tv1.setText(dictUnit.name);
55 | }
56 | break;
57 | default:
58 |
59 | }
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/MainActivity.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo;
2 |
3 | import android.content.Context;
4 | import android.content.Intent;
5 | import android.os.Bundle;
6 | import android.support.v7.app.ActionBarActivity;
7 | import android.view.LayoutInflater;
8 | import android.view.Menu;
9 | import android.view.MenuItem;
10 | import android.view.View;
11 | import android.widget.AdapterView;
12 | import android.widget.ListView;
13 | import android.widget.Toast;
14 |
15 | import com.mulitmenuselect.demo.adapter.DictDialogAdapter;
16 | import com.mulitmenuselect.demo.adapter.MyPagerAdapter;
17 | import com.mulitmenuselect.demo.dialog.DictDataManager;
18 | import com.mulitmenuselect.demo.dialog.DictUnit;
19 | import com.mulitmenuselect.demo.widget.MyViewPager;
20 |
21 | import java.io.Serializable;
22 | import java.util.ArrayList;
23 | import java.util.List;
24 |
25 |
26 | public class MainActivity extends ActionBarActivity {
27 | private Context mContext;
28 | public DictDataManager mDictDataManager = DictDataManager.getInstance();
29 | private MyViewPager mViewPager;
30 | private View view1,view2,view3;
31 | private ListView mListView1,mListView2,mListView3;
32 | private DictDialogAdapter mListView1Adapter, mListView2Adapter, mListView3Adapter;
33 | private List views = new ArrayList();
34 |
35 | @Override
36 | protected void onCreate(Bundle savedInstanceState) {
37 | super.onCreate(savedInstanceState);
38 | setContentView(R.layout.activity_main);
39 | mContext = this;
40 | initViews();
41 | }
42 |
43 | private void initViews() {
44 | mViewPager = (MyViewPager) findViewById(R.id.viewpager);
45 | LayoutInflater inflater = LayoutInflater.from(this);
46 | view1 = inflater.inflate(R.layout.page1, null);
47 | view2 = inflater.inflate(R.layout.page1, null);
48 | view3 = inflater.inflate(R.layout.page1, null);
49 | mListView1 = (ListView) view1.findViewById(R.id.listview1);
50 | mListView2 = (ListView) view2.findViewById(R.id.listview1);
51 | mListView3 = (ListView) view3.findViewById(R.id.listview1);
52 |
53 | List list1=mDictDataManager.getTripleColumnData(this, 0);
54 | mListView1Adapter = new DictDialogAdapter(this, list1);
55 | mListView1Adapter.setSelectedBackground(R.drawable.select_white);
56 | mListView1Adapter.setHasDivider(false);
57 | mListView1Adapter.setNormalBackgroundResource(R.color.dictdialog_bg_gray);
58 | mListView1.setAdapter(mListView1Adapter);
59 |
60 | views.add(view1);
61 | views.add(view2);
62 | mViewPager.setAdapter(new MyPagerAdapter(views));
63 |
64 | mListView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
65 | @Override
66 | public void onItemClick(AdapterView> parent, View view, int position, long id) {
67 | if (mListView1Adapter != null)
68 | mListView1Adapter.setSelectedItem(position);
69 | if (mListView2Adapter != null)
70 | mListView2Adapter.setSelectedItem(-1);
71 |
72 | if (views.contains(view3)) {
73 | views.remove(view3);
74 | mViewPager.getAdapter().notifyDataSetChanged();
75 | }
76 | DictUnit dictUnit = (DictUnit) parent.getItemAtPosition(position);
77 | if (dictUnit.id == 0) {//不限
78 | if (mListView2Adapter != null) {
79 | mListView2Adapter.setData(new ArrayList());
80 | mListView2Adapter.notifyDataSetChanged();
81 | }
82 |
83 | setResultDate(dictUnit);
84 | } else {
85 | List list2 = mDictDataManager.getTripleColumnData(mContext, dictUnit.id);
86 | if (mListView2Adapter == null) {
87 | mListView2Adapter = new DictDialogAdapter(mContext, list2);
88 | mListView2Adapter.setNormalBackgroundResource(R.color.white);
89 | mListView2.setAdapter(mListView2Adapter);
90 | } else {
91 | mListView2Adapter.setData(list2);
92 | mListView2Adapter.notifyDataSetChanged();
93 | }
94 |
95 |
96 | // mRootView.invalidate();
97 | }
98 |
99 | }
100 | });
101 | mListView2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
102 | @Override
103 | public void onItemClick(AdapterView> parent, final View view, int position, long id) {
104 | if (mListView2Adapter != null) {
105 | mListView2Adapter.setSelectedItem(position);
106 | mListView2Adapter.setSelectedBackground(R.drawable.select_gray);
107 | }
108 |
109 | if (views.contains(view3)) {
110 | views.remove(view3);
111 | }
112 |
113 | DictUnit dictUnit = (DictUnit) parent.getItemAtPosition(position);
114 | List list3 = mDictDataManager.getTripleColumnData(mContext, dictUnit.id);
115 | if (mListView3Adapter == null) {
116 | mListView3Adapter = new DictDialogAdapter(mContext, list3);
117 | mListView3Adapter.setHasDivider(false);
118 | mListView3Adapter.setNormalBackgroundResource(R.color.dictdialog_bg_gray);
119 | mListView3.setAdapter(mListView3Adapter);
120 | } else {
121 | mListView3Adapter.setData(list3);
122 | mListView3Adapter.notifyDataSetChanged();
123 | }
124 |
125 | views.add(view3);
126 | mViewPager.getAdapter().notifyDataSetChanged();
127 | mViewPager.postDelayed(new Runnable() {
128 | @Override
129 | public void run() {
130 | mViewPager.setCurrentItem(views.size()-1);
131 | }
132 | }, 300);
133 | }
134 | });
135 | mListView3.setOnItemClickListener(new AdapterView.OnItemClickListener() {
136 | @Override
137 | public void onItemClick(AdapterView> parent, View view, int position, long id) {
138 | DictUnit dictUnit = (DictUnit) parent.getItemAtPosition(position);
139 | setResultDate(dictUnit);
140 | }
141 | });
142 | }
143 |
144 | private void setResultDate(DictUnit dictUnit){
145 | Intent intent=new Intent();
146 | intent.putExtra("dict",(Serializable)dictUnit);
147 | setResult(0, intent);
148 | finish();
149 | }
150 | @Override
151 | public boolean onCreateOptionsMenu(Menu menu) {
152 | // Inflate the menu; this adds items to the action bar if it is present.
153 | getMenuInflater().inflate(R.menu.menu_main, menu);
154 | return true;
155 | }
156 |
157 | @Override
158 | public boolean onOptionsItemSelected(MenuItem item) {
159 | // Handle action bar item clicks here. The action bar will
160 | // automatically handle clicks on the Home/Up button, so long
161 | // as you specify a parent activity in AndroidManifest.xml.
162 | int id = item.getItemId();
163 |
164 | //noinspection SimplifiableIfStatement
165 | if (id == R.id.action_settings) {
166 | Toast.makeText(this,"settings",Toast.LENGTH_LONG).show();
167 | return true;
168 | }
169 |
170 | return super.onOptionsItemSelected(item);
171 | }
172 |
173 | }
174 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/adapter/DictDialogAdapter.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo.adapter;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.View;
6 | import android.view.ViewGroup;
7 | import android.widget.BaseAdapter;
8 | import android.widget.LinearLayout;
9 | import android.widget.TextView;
10 |
11 | import com.mulitmenuselect.demo.R;
12 | import com.mulitmenuselect.demo.dialog.DictUnit;
13 |
14 | import java.util.List;
15 |
16 | public class DictDialogAdapter extends BaseAdapter {
17 |
18 | private Context mContext;
19 | private List mData;
20 | private int selectedPos = -1;
21 | private int mSelectedBackgroundResource;
22 | private int mNormalBackgroundResource;
23 | private boolean hasDivider = true;
24 |
25 |
26 | public void setNormalBackgroundResource(int normalBackgroundResource) {
27 | this.mNormalBackgroundResource = normalBackgroundResource;
28 | }
29 |
30 | public void setHasDivider(boolean hasDivider) {
31 | this.hasDivider = hasDivider;
32 | }
33 |
34 | public DictDialogAdapter(Context context, List data) {
35 | this.mContext = context;
36 | mData = data;
37 | }
38 |
39 | public void setSelectedBackground(int res) {
40 | mSelectedBackgroundResource = res;
41 | }
42 |
43 |
44 | public void setSelectedItem(int position) {
45 | selectedPos = position;
46 | notifyDataSetChanged();
47 | }
48 |
49 |
50 | public void setData(List data) {
51 | mData = data;
52 | notifyDataSetChanged();
53 | }
54 |
55 | @Override
56 | public int getCount() {
57 | if (mData==null)
58 | return 0;
59 | return mData.size();
60 | }
61 |
62 | @Override
63 | public Object getItem(int position) {
64 | if (mData==null)
65 | return null;
66 | return mData.get(position);
67 | }
68 |
69 | @Override
70 | public long getItemId(int position) {
71 | return position;
72 | }
73 |
74 | @Override
75 | public View getView(int position, View convertView, ViewGroup parent) {
76 | if (convertView == null) {
77 | convertView = LayoutInflater.from(mContext).inflate(R.layout.layout_dict_item, parent, false);
78 |
79 | }
80 |
81 | LinearLayout itemLayout= ViewHolder.get(convertView, R.id.dict_item_ly);
82 |
83 | TextView nameText = ViewHolder.get(convertView, R.id.dict_item_textview);
84 |
85 | TextView dividerTextView = ViewHolder.get(convertView, R.id.dict_item_divider);
86 |
87 | final DictUnit dictUnit = mData.get(position);
88 |
89 | nameText.setText(dictUnit.name);
90 |
91 |
92 | convertView.setSelected(selectedPos == position);
93 | nameText.setSelected(selectedPos == position);
94 |
95 | nameText.setTextColor(selectedPos == position ? 0xFF00B4C9 : 0xFF333333);
96 |
97 | if (mNormalBackgroundResource == 0)
98 | mNormalBackgroundResource = R.color.white;
99 |
100 | if (mSelectedBackgroundResource != 0)
101 | itemLayout.setBackgroundResource(selectedPos == position ? mSelectedBackgroundResource : mNormalBackgroundResource);
102 |
103 | dividerTextView.setVisibility(hasDivider ? View.VISIBLE : View.INVISIBLE);
104 |
105 | return convertView;
106 | }
107 |
108 |
109 |
110 | }
111 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/adapter/MyPagerAdapter.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo.adapter;
2 |
3 | import android.support.v4.view.PagerAdapter;
4 | import android.util.Log;
5 | import android.view.View;
6 |
7 | import com.mulitmenuselect.demo.widget.MyViewPager;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * Created by yuliang.zhao on 2015/3/18.
13 | */
14 | public class MyPagerAdapter extends PagerAdapter {
15 | private List viewList;
16 |
17 | public MyPagerAdapter(List viewList) {
18 | this.viewList = viewList;
19 | }
20 |
21 | @Override
22 | public int getCount() {
23 | // TODO Auto-generated method stub
24 | if (viewList != null) {
25 | return viewList.size();
26 | }
27 | return 0;
28 | }
29 |
30 | @Override
31 | public boolean isViewFromObject(View arg0, Object arg1) {
32 | // TODO Auto-generated method stub
33 | return (arg0 == arg1);
34 | }
35 |
36 | @Override
37 | public Object instantiateItem(View container, int position) {
38 | // TODO Auto-generated method stub
39 | ((MyViewPager) container).addView(viewList.get(position), 0);
40 |
41 | return viewList.get(position);
42 | }
43 |
44 | @Override
45 | public void destroyItem(View container, int position, Object object) {
46 | // TODO Auto-generated method stub
47 | ((MyViewPager) container).removeView(viewList.get(position));
48 | }
49 |
50 | @Override
51 | public float getPageWidth(int position) {
52 | Log.d("d","pagewidth = "+super.getPageWidth(position));
53 | return 0.5f;
54 | }
55 | }
56 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/adapter/ViewHolder.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo.adapter;
2 |
3 | import android.util.SparseArray;
4 | import android.view.View;
5 |
6 | public class ViewHolder {
7 |
8 |
9 | private ViewHolder(){}
10 | public static T get(View view, int id) {
11 | SparseArray viewHolder = (SparseArray) view.getTag();
12 | if (viewHolder == null) {
13 | viewHolder = new SparseArray();
14 | view.setTag(viewHolder);
15 | }
16 | View childView = viewHolder.get(id);
17 | if (childView == null) {
18 | childView = view.findViewById(id);
19 | viewHolder.put(id, childView);
20 | }
21 | return (T) childView;
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/dialog/DictDataManager.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo.dialog;
2 |
3 | import android.content.Context;
4 |
5 | import java.util.List;
6 |
7 | public final class DictDataManager {
8 | public enum DictType {
9 | POSITION_FUNCTION("position_function.txt");
10 |
11 | String fileName;
12 | private DictType(String fileName){
13 | this.fileName = fileName;
14 | }
15 | public String getFileName(){
16 | return fileName;
17 | }
18 | }
19 |
20 | private static DictDataManager mInstance;
21 |
22 | private DictDataManager() {
23 |
24 | }
25 |
26 | public static DictDataManager getInstance() {
27 | if (mInstance == null) {
28 | mInstance = new DictDataManager();
29 | }
30 | return mInstance;
31 | }
32 |
33 | public List getTripleColumnData(Context mContext, int flag){
34 | return DictUtil.getPositions(mContext, flag, DictType.POSITION_FUNCTION.getFileName());
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/dialog/DictUnit.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo.dialog;
2 |
3 | import java.io.Serializable;
4 |
5 | public class DictUnit implements Serializable{
6 |
7 | public int id;
8 | public String name;
9 | public int flag;
10 |
11 | public DictUnit() {
12 |
13 | }
14 | public DictUnit(int id, String name, int flag) {
15 | this.id = id;
16 | this.name = name;
17 | this.flag = flag;
18 | }
19 |
20 | }
21 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/dialog/DictUtil.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo.dialog;
2 |
3 | import android.content.Context;
4 | import android.content.res.AssetManager;
5 |
6 | import com.mulitmenuselect.demo.dialog.DictUnit;
7 |
8 | import java.io.ByteArrayOutputStream;
9 | import java.io.IOException;
10 | import java.io.InputStream;
11 | import java.util.ArrayList;
12 | import java.util.HashMap;
13 | import java.util.List;
14 |
15 | public class DictUtil {
16 | public static List city1, city2, city3, industry, position, major, stuMajor, practice_salary2, partTimeJob;
17 | public static HashMap> citys1, citys2, citys3, industrys, positions,
18 | majors, stuMajors, practice_salary2s, partTimeJobs;
19 |
20 |
21 | public static List getPositions(Context context, int flag, String fileName) {
22 | if (position == null) {
23 | initPositions(context, fileName);
24 | }
25 | if (flag == 0) {
26 | return position;
27 | } else {
28 | return positions.get(flag);
29 | }
30 | }
31 |
32 | private static void initPositions(Context context, String fileName) {
33 | String industryString = readAssetsTXT(context, fileName);
34 | String[] strings = industryString.split(";");
35 | position = new ArrayList();
36 | positions = new HashMap>();
37 | for (int i = 0; i < strings.length; i++) {
38 | String[] items = strings[i].split(",");
39 | DictUnit tmp = new DictUnit();
40 | tmp.id = Integer.parseInt(items[0].trim());
41 | tmp.name = items[1];
42 | tmp.flag = Integer.parseInt(items[2].trim());
43 | if (tmp.flag == 0) {
44 | position.add(tmp);
45 | } else {
46 | if (positions.get(tmp.flag) == null) {
47 | ArrayList temp = new ArrayList();
48 | temp.add(tmp);
49 | positions.put(tmp.flag, temp);
50 | } else {
51 | positions.get(tmp.flag).add(tmp);
52 | }
53 | }
54 | }
55 | }
56 |
57 | /**
58 | * 读取assets文件夹下的txt字典库文�?
59 | *
60 | * @param context
61 | * 句柄
62 | * @param fName
63 | * 文件�?
64 | * @return
65 | */
66 | public static String readAssetsTXT(Context context, String fName) {
67 | try {
68 | AssetManager assetManager = context.getAssets();
69 | InputStream is = assetManager.open(fName);
70 | byte[] bytes = new byte[1024];
71 | int leng;
72 | ByteArrayOutputStream baos = new ByteArrayOutputStream();
73 | while ((leng = is.read(bytes)) != -1) {
74 | baos.write(bytes, 0, leng);
75 | }
76 | return new String(baos.toByteArray());
77 | } catch (IOException e) {
78 | e.printStackTrace();
79 | return null;
80 | }
81 |
82 | }
83 | }
84 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/dialog/MultiDialog.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo.dialog;
2 |
3 | import android.app.Dialog;
4 | import android.content.Context;
5 | import android.view.Gravity;
6 | import android.view.View;
7 | import android.view.Window;
8 | import android.view.WindowManager;
9 | import android.widget.LinearLayout;
10 | import android.widget.TextView;
11 |
12 | import com.mulitmenuselect.demo.R;
13 |
14 | /**
15 | * Created by yuliang.zhao on 2015/3/18.
16 | */
17 | public class MultiDialog extends Dialog {
18 |
19 | public Context mContext;
20 | public LinearLayout containerViewGroup;
21 | public View mContentView;
22 | public TextView titleView;
23 | Window window = null;
24 |
25 | public MultiDialog(Context context) {
26 | super(context, R.style.dialog_change_card);
27 | mContext = context;
28 | containerViewGroup = (LinearLayout) getLayoutInflater().inflate(R.layout.layout_dictdialog_container, null);
29 | titleView = (TextView) containerViewGroup.findViewById(R.id.dictdialog_title_tv);
30 | }
31 |
32 | public View findViewById(int id) {
33 | return mContentView.findViewById(id);
34 | }
35 |
36 | /**
37 | * 设置窗口显示
38 | */
39 | public void windowDeploy() {
40 | window = getWindow(); // 得到对话框
41 | window.setWindowAnimations(R.style.RegDialogAnimation); // 设置窗口弹出动画
42 | // window.setBackgroundDrawableResource(R.drawable.bg_picker_view);
43 | WindowManager.LayoutParams wl = window.getAttributes();
44 | wl.x = 0; // x小于0左移,大于0右移
45 | wl.y = 0; // y小于0上移,大于0下移
46 | // wl.height = 2*DajieApp.mScreenHeight/3;
47 | wl.height = 2 * mContext.getResources().getDisplayMetrics().heightPixels / 3;
48 | wl.width = LinearLayout.LayoutParams.FILL_PARENT;
49 | // wl.alpha = 0.6f; //设置透明度
50 | wl.gravity = Gravity.BOTTOM; // 设置重力
51 | window.setAttributes(wl);
52 | }
53 |
54 | @Override
55 | public void show() {
56 | if (mContentView != null) {
57 | containerViewGroup.addView(mContentView);
58 | }
59 | setContentView(containerViewGroup);
60 | setCanceledOnTouchOutside(true);
61 | windowDeploy();
62 | super.show();
63 | }
64 |
65 | @Override
66 | public void setTitle(CharSequence title) {
67 | // TODO Auto-generated method stub
68 | if (titleView != null)
69 | titleView.setText(title);
70 | }
71 | }
72 |
73 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/dialog/ThirdDialog.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo.dialog;
2 |
3 | import android.content.Context;
4 | import android.view.LayoutInflater;
5 | import android.view.MotionEvent;
6 | import android.view.View;
7 | import android.widget.AdapterView;
8 | import android.widget.LinearLayout;
9 | import android.widget.ListView;
10 |
11 | import com.mulitmenuselect.demo.R;
12 | import com.mulitmenuselect.demo.adapter.DictDialogAdapter;
13 | import com.mulitmenuselect.demo.adapter.MyPagerAdapter;
14 | import com.mulitmenuselect.demo.widget.MyViewPager;
15 |
16 | import java.util.ArrayList;
17 | import java.util.List;
18 |
19 | /**
20 | * Created by yuliang.zhao on 2015/3/18.
21 | */
22 | public class ThirdDialog extends MultiDialog {
23 | private int mWidth;
24 | private MyViewPager mViewPager;
25 | private LinearLayout mRootView;
26 | private View view1,view2,view3;
27 | private ListView mListView1,mListView2,mListView3;
28 | private DictDialogAdapter mListView1Adapter, mListView2Adapter, mListView3Adapter;
29 | private List views = new ArrayList();
30 | public DictDataManager mDictDataManager = DictDataManager.getInstance();
31 | private DictItemClickListener mDictItemClickListener;
32 |
33 | public ThirdDialog(Context context) {
34 | super(context);
35 | mWidth = mContext.getResources().getDisplayMetrics().widthPixels;
36 | mContentView = LayoutInflater.from(context).inflate(R.layout.layout_dialog,null);
37 | initViews();
38 | setTitle("三级列表");
39 | }
40 |
41 | private void initViews() {
42 | mRootView = (LinearLayout) findViewById(R.id.rootview);
43 | mViewPager = (MyViewPager) findViewById(R.id.viewpager);
44 | mViewPager.setOffscreenPageLimit(2);
45 | LayoutInflater inflater = LayoutInflater.from(mContext);
46 | view1 = inflater.inflate(R.layout.page1, null);
47 | view2 = inflater.inflate(R.layout.page1, null);
48 | view3 = inflater.inflate(R.layout.page1, null);
49 | mListView1 = (ListView) view1.findViewById(R.id.listview1);
50 | mListView2 = (ListView) view2.findViewById(R.id.listview1);
51 | mListView3 = (ListView) view3.findViewById(R.id.listview1);
52 |
53 | List list1=mDictDataManager.getTripleColumnData(mContext, 0);
54 | mListView1Adapter = new DictDialogAdapter(mContext, list1);
55 | mListView1Adapter.setSelectedBackground(R.drawable.select_white);
56 | mListView1Adapter.setHasDivider(false);
57 | mListView1Adapter.setNormalBackgroundResource(R.color.dictdialog_bg_gray);
58 | mListView1.setAdapter(mListView1Adapter);
59 |
60 | views.add(view1);
61 | views.add(view2);
62 | mViewPager.setAdapter(new MyPagerAdapter(views));
63 | mRootView.setOnTouchListener(new View.OnTouchListener() {
64 |
65 | @Override
66 | public boolean onTouch(View v, MotionEvent event) {
67 | return mViewPager.dispatchTouchEvent(event);
68 | }
69 | });
70 |
71 | mListView1.setOnItemClickListener(new AdapterView.OnItemClickListener() {
72 | @Override
73 | public void onItemClick(AdapterView> parent, View view, int position, long id) {
74 | if (mListView1Adapter != null)
75 | mListView1Adapter.setSelectedItem(position);
76 | if (mListView2Adapter != null)
77 | mListView2Adapter.setSelectedItem(-1);
78 |
79 | if (views.contains(view3)) {
80 | views.remove(view3);
81 | mViewPager.getAdapter().notifyDataSetChanged();
82 | }
83 | DictUnit dictUnit = (DictUnit) parent.getItemAtPosition(position);
84 | if (dictUnit.id == 0) {//不限
85 | if (mListView2Adapter != null) {
86 | mListView2Adapter.setData(new ArrayList());
87 | mListView2Adapter.notifyDataSetChanged();
88 | }
89 | setDictItemClickListener(dictUnit);
90 | } else {
91 | List list2 = mDictDataManager.getTripleColumnData(mContext, dictUnit.id);
92 | if (mListView2Adapter == null) {
93 | mListView2Adapter = new DictDialogAdapter(mContext, list2);
94 | mListView2Adapter.setNormalBackgroundResource(R.color.white);
95 | mListView2.setAdapter(mListView2Adapter);
96 | } else {
97 | mListView2Adapter.setData(list2);
98 | mListView2Adapter.notifyDataSetChanged();
99 | }
100 |
101 | }
102 | }
103 | });
104 | mListView2.setOnItemClickListener(new AdapterView.OnItemClickListener() {
105 | @Override
106 | public void onItemClick(AdapterView> parent, View view, int position, long id) {
107 | if (mListView2Adapter != null) {
108 | mListView2Adapter.setSelectedItem(position);
109 | mListView2Adapter.setSelectedBackground(R.drawable.select_gray);
110 | }
111 |
112 | if (views.contains(view3)) {
113 | views.remove(view3);
114 | }
115 |
116 | DictUnit dictUnit = (DictUnit) parent.getItemAtPosition(position);
117 | List list3 = mDictDataManager.getTripleColumnData(mContext, dictUnit.id);
118 | if (mListView3Adapter == null) {
119 | mListView3Adapter = new DictDialogAdapter(mContext, list3);
120 | mListView3Adapter.setHasDivider(false);
121 | mListView3Adapter.setNormalBackgroundResource(R.color.dictdialog_bg_gray);
122 | mListView3.setAdapter(mListView3Adapter);
123 | } else {
124 | mListView3Adapter.setData(list3);
125 | mListView3Adapter.notifyDataSetChanged();
126 | }
127 |
128 | views.add(view3);
129 | mViewPager.getAdapter().notifyDataSetChanged();
130 |
131 | if (mViewPager.getCurrentItem() != 1) {
132 | mViewPager.postDelayed(new Runnable() {
133 | @Override
134 | public void run() {
135 | mViewPager.setCurrentItem(1);
136 | }
137 | }, 300);
138 | }
139 | }
140 | });
141 | mListView3.setOnItemClickListener(new AdapterView.OnItemClickListener() {
142 | @Override
143 | public void onItemClick(AdapterView> parent, View view, int position, long id) {
144 | DictUnit dictUnit = (DictUnit) parent.getItemAtPosition(position);
145 | setDictItemClickListener(dictUnit);
146 | }
147 | });
148 | }
149 |
150 | private void setDictItemClickListener(DictUnit dictUnit) {
151 | if (mDictItemClickListener != null) {
152 | mDictItemClickListener.onDictItemClick(dictUnit);
153 | }
154 | dismiss();
155 | }
156 |
157 | public final void setonItemClickListener(DictItemClickListener listener) {
158 | mDictItemClickListener = listener;
159 | }
160 |
161 | public interface DictItemClickListener {
162 | public void onDictItemClick(DictUnit dictUnit);
163 | }
164 | }
165 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/java/com/mulitmenuselect/demo/widget/MyViewPager.java:
--------------------------------------------------------------------------------
1 | package com.mulitmenuselect.demo.widget;
2 |
3 | import android.content.Context;
4 | import android.support.v4.view.ViewPager;
5 | import android.util.AttributeSet;
6 |
7 | /**
8 | * Created by yuliang.zhao on 2015/3/5.
9 | */
10 | public class MyViewPager extends ViewPager {
11 |
12 | public MyViewPager(Context context) {
13 | super(context);
14 | }
15 |
16 | public MyViewPager(Context context, AttributeSet attrs) {
17 | super(context, attrs);
18 | }
19 |
20 |
21 |
22 |
23 | @Override
24 | public void scrollTo(int x, int y) {
25 | if (getAdapter()==null || x>getWidth()*(getAdapter().getCount()-2)){
26 | return;
27 | }
28 | super.scrollTo(x, y);
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/anim/attention_guide_in.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/anim/attention_guide_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/drawable-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arlong/MultiMenuSelect/7060cd703191b812f2a332a2110207b82f2f6e0d/MultiMenuSelectDemo/app/src/main/res/drawable-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/drawable-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arlong/MultiMenuSelect/7060cd703191b812f2a332a2110207b82f2f6e0d/MultiMenuSelectDemo/app/src/main/res/drawable-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/drawable-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arlong/MultiMenuSelect/7060cd703191b812f2a332a2110207b82f2f6e0d/MultiMenuSelectDemo/app/src/main/res/drawable-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/drawable-xhdpi/select_gray.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arlong/MultiMenuSelect/7060cd703191b812f2a332a2110207b82f2f6e0d/MultiMenuSelectDemo/app/src/main/res/drawable-xhdpi/select_gray.9.png
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/drawable-xhdpi/select_white.9.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arlong/MultiMenuSelect/7060cd703191b812f2a332a2110207b82f2f6e0d/MultiMenuSelectDemo/app/src/main/res/drawable-xhdpi/select_white.9.png
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/drawable-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arlong/MultiMenuSelect/7060cd703191b812f2a332a2110207b82f2f6e0d/MultiMenuSelectDemo/app/src/main/res/drawable-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/layout/activity_home.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
14 |
15 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/layout/layout_dialog.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/layout/layout_dict_item.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
19 |
20 |
21 |
28 |
29 |
30 |
31 |
32 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/layout/layout_dictdialog_container.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
11 |
12 |
20 |
21 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/layout/page1.xml:
--------------------------------------------------------------------------------
1 |
6 |
7 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/menu/menu_main.xml:
--------------------------------------------------------------------------------
1 |
7 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/values-w820dp/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 | 64dp
6 |
7 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/values/color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #FFFFFF
4 | #ededed
5 | #e7e7e7
6 | #f5f5f5
7 |
8 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 16dp
4 | 16dp
5 |
6 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | MultiMenuSelectDemo
5 | Hello world!
6 | Open_Demo
7 | Settings
8 |
9 |
10 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/app/src/main/res/values/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
17 |
18 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 |
3 | buildscript {
4 | repositories {
5 | jcenter()
6 | }
7 | dependencies {
8 | classpath 'com.android.tools.build:gradle:1.0.0'
9 |
10 | // NOTE: Do not place your application dependencies here; they belong
11 | // in the individual module build.gradle files
12 | }
13 | }
14 |
15 | allprojects {
16 | repositories {
17 | jcenter()
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 |
3 | # IDE (e.g. Android Studio) users:
4 | # Gradle settings configured through the IDE *will override*
5 | # any settings specified in this file.
6 |
7 | # For more details on how to configure your build environment visit
8 | # http://www.gradle.org/docs/current/userguide/build_environment.html
9 |
10 | # Specifies the JVM arguments used for the daemon process.
11 | # The setting is particularly useful for tweaking memory settings.
12 | # Default value: -Xmx10248m -XX:MaxPermSize=256m
13 | # org.gradle.jvmargs=-Xmx2048m -XX:MaxPermSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8
14 |
15 | # When configured, Gradle will run in incubating parallel mode.
16 | # This option should only be used with decoupled projects. More details, visit
17 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
18 | # org.gradle.parallel=true
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arlong/MultiMenuSelect/7060cd703191b812f2a332a2110207b82f2f6e0d/MultiMenuSelectDemo/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Wed Apr 10 15:27:10 PDT 2013
2 | distributionBase=GRADLE_USER_HOME
3 | distributionPath=wrapper/dists
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 | distributionUrl=https\://services.gradle.org/distributions/gradle-2.2.1-all.zip
7 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/gradlew:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 |
3 | ##############################################################################
4 | ##
5 | ## Gradle start up script for UN*X
6 | ##
7 | ##############################################################################
8 |
9 | # Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
10 | DEFAULT_JVM_OPTS=""
11 |
12 | APP_NAME="Gradle"
13 | APP_BASE_NAME=`basename "$0"`
14 |
15 | # Use the maximum available, or set MAX_FD != -1 to use that value.
16 | MAX_FD="maximum"
17 |
18 | warn ( ) {
19 | echo "$*"
20 | }
21 |
22 | die ( ) {
23 | echo
24 | echo "$*"
25 | echo
26 | exit 1
27 | }
28 |
29 | # OS specific support (must be 'true' or 'false').
30 | cygwin=false
31 | msys=false
32 | darwin=false
33 | case "`uname`" in
34 | CYGWIN* )
35 | cygwin=true
36 | ;;
37 | Darwin* )
38 | darwin=true
39 | ;;
40 | MINGW* )
41 | msys=true
42 | ;;
43 | esac
44 |
45 | # For Cygwin, ensure paths are in UNIX format before anything is touched.
46 | if $cygwin ; then
47 | [ -n "$JAVA_HOME" ] && JAVA_HOME=`cygpath --unix "$JAVA_HOME"`
48 | fi
49 |
50 | # Attempt to set APP_HOME
51 | # Resolve links: $0 may be a link
52 | PRG="$0"
53 | # Need this for relative symlinks.
54 | while [ -h "$PRG" ] ; do
55 | ls=`ls -ld "$PRG"`
56 | link=`expr "$ls" : '.*-> \(.*\)$'`
57 | if expr "$link" : '/.*' > /dev/null; then
58 | PRG="$link"
59 | else
60 | PRG=`dirname "$PRG"`"/$link"
61 | fi
62 | done
63 | SAVED="`pwd`"
64 | cd "`dirname \"$PRG\"`/" >&-
65 | APP_HOME="`pwd -P`"
66 | cd "$SAVED" >&-
67 |
68 | CLASSPATH=$APP_HOME/gradle/wrapper/gradle-wrapper.jar
69 |
70 | # Determine the Java command to use to start the JVM.
71 | if [ -n "$JAVA_HOME" ] ; then
72 | if [ -x "$JAVA_HOME/jre/sh/java" ] ; then
73 | # IBM's JDK on AIX uses strange locations for the executables
74 | JAVACMD="$JAVA_HOME/jre/sh/java"
75 | else
76 | JAVACMD="$JAVA_HOME/bin/java"
77 | fi
78 | if [ ! -x "$JAVACMD" ] ; then
79 | die "ERROR: JAVA_HOME is set to an invalid directory: $JAVA_HOME
80 |
81 | Please set the JAVA_HOME variable in your environment to match the
82 | location of your Java installation."
83 | fi
84 | else
85 | JAVACMD="java"
86 | which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
87 |
88 | Please set the JAVA_HOME variable in your environment to match the
89 | location of your Java installation."
90 | fi
91 |
92 | # Increase the maximum file descriptors if we can.
93 | if [ "$cygwin" = "false" -a "$darwin" = "false" ] ; then
94 | MAX_FD_LIMIT=`ulimit -H -n`
95 | if [ $? -eq 0 ] ; then
96 | if [ "$MAX_FD" = "maximum" -o "$MAX_FD" = "max" ] ; then
97 | MAX_FD="$MAX_FD_LIMIT"
98 | fi
99 | ulimit -n $MAX_FD
100 | if [ $? -ne 0 ] ; then
101 | warn "Could not set maximum file descriptor limit: $MAX_FD"
102 | fi
103 | else
104 | warn "Could not query maximum file descriptor limit: $MAX_FD_LIMIT"
105 | fi
106 | fi
107 |
108 | # For Darwin, add options to specify how the application appears in the dock
109 | if $darwin; then
110 | GRADLE_OPTS="$GRADLE_OPTS \"-Xdock:name=$APP_NAME\" \"-Xdock:icon=$APP_HOME/media/gradle.icns\""
111 | fi
112 |
113 | # For Cygwin, switch paths to Windows format before running java
114 | if $cygwin ; then
115 | APP_HOME=`cygpath --path --mixed "$APP_HOME"`
116 | CLASSPATH=`cygpath --path --mixed "$CLASSPATH"`
117 |
118 | # We build the pattern for arguments to be converted via cygpath
119 | ROOTDIRSRAW=`find -L / -maxdepth 1 -mindepth 1 -type d 2>/dev/null`
120 | SEP=""
121 | for dir in $ROOTDIRSRAW ; do
122 | ROOTDIRS="$ROOTDIRS$SEP$dir"
123 | SEP="|"
124 | done
125 | OURCYGPATTERN="(^($ROOTDIRS))"
126 | # Add a user-defined pattern to the cygpath arguments
127 | if [ "$GRADLE_CYGPATTERN" != "" ] ; then
128 | OURCYGPATTERN="$OURCYGPATTERN|($GRADLE_CYGPATTERN)"
129 | fi
130 | # Now convert the arguments - kludge to limit ourselves to /bin/sh
131 | i=0
132 | for arg in "$@" ; do
133 | CHECK=`echo "$arg"|egrep -c "$OURCYGPATTERN" -`
134 | CHECK2=`echo "$arg"|egrep -c "^-"` ### Determine if an option
135 |
136 | if [ $CHECK -ne 0 ] && [ $CHECK2 -eq 0 ] ; then ### Added a condition
137 | eval `echo args$i`=`cygpath --path --ignore --mixed "$arg"`
138 | else
139 | eval `echo args$i`="\"$arg\""
140 | fi
141 | i=$((i+1))
142 | done
143 | case $i in
144 | (0) set -- ;;
145 | (1) set -- "$args0" ;;
146 | (2) set -- "$args0" "$args1" ;;
147 | (3) set -- "$args0" "$args1" "$args2" ;;
148 | (4) set -- "$args0" "$args1" "$args2" "$args3" ;;
149 | (5) set -- "$args0" "$args1" "$args2" "$args3" "$args4" ;;
150 | (6) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" ;;
151 | (7) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" ;;
152 | (8) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" ;;
153 | (9) set -- "$args0" "$args1" "$args2" "$args3" "$args4" "$args5" "$args6" "$args7" "$args8" ;;
154 | esac
155 | fi
156 |
157 | # Split up the JVM_OPTS And GRADLE_OPTS values into an array, following the shell quoting and substitution rules
158 | function splitJvmOpts() {
159 | JVM_OPTS=("$@")
160 | }
161 | eval splitJvmOpts $DEFAULT_JVM_OPTS $JAVA_OPTS $GRADLE_OPTS
162 | JVM_OPTS[${#JVM_OPTS[*]}]="-Dorg.gradle.appname=$APP_BASE_NAME"
163 |
164 | exec "$JAVACMD" "${JVM_OPTS[@]}" -classpath "$CLASSPATH" org.gradle.wrapper.GradleWrapperMain "$@"
165 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/gradlew.bat:
--------------------------------------------------------------------------------
1 | @if "%DEBUG%" == "" @echo off
2 | @rem ##########################################################################
3 | @rem
4 | @rem Gradle startup script for Windows
5 | @rem
6 | @rem ##########################################################################
7 |
8 | @rem Set local scope for the variables with windows NT shell
9 | if "%OS%"=="Windows_NT" setlocal
10 |
11 | @rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
12 | set DEFAULT_JVM_OPTS=
13 |
14 | set DIRNAME=%~dp0
15 | if "%DIRNAME%" == "" set DIRNAME=.
16 | set APP_BASE_NAME=%~n0
17 | set APP_HOME=%DIRNAME%
18 |
19 | @rem Find java.exe
20 | if defined JAVA_HOME goto findJavaFromJavaHome
21 |
22 | set JAVA_EXE=java.exe
23 | %JAVA_EXE% -version >NUL 2>&1
24 | if "%ERRORLEVEL%" == "0" goto init
25 |
26 | echo.
27 | echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
28 | echo.
29 | echo Please set the JAVA_HOME variable in your environment to match the
30 | echo location of your Java installation.
31 |
32 | goto fail
33 |
34 | :findJavaFromJavaHome
35 | set JAVA_HOME=%JAVA_HOME:"=%
36 | set JAVA_EXE=%JAVA_HOME%/bin/java.exe
37 |
38 | if exist "%JAVA_EXE%" goto init
39 |
40 | echo.
41 | echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
42 | echo.
43 | echo Please set the JAVA_HOME variable in your environment to match the
44 | echo location of your Java installation.
45 |
46 | goto fail
47 |
48 | :init
49 | @rem Get command-line arguments, handling Windowz variants
50 |
51 | if not "%OS%" == "Windows_NT" goto win9xME_args
52 | if "%@eval[2+2]" == "4" goto 4NT_args
53 |
54 | :win9xME_args
55 | @rem Slurp the command line arguments.
56 | set CMD_LINE_ARGS=
57 | set _SKIP=2
58 |
59 | :win9xME_args_slurp
60 | if "x%~1" == "x" goto execute
61 |
62 | set CMD_LINE_ARGS=%*
63 | goto execute
64 |
65 | :4NT_args
66 | @rem Get arguments from the 4NT Shell from JP Software
67 | set CMD_LINE_ARGS=%$
68 |
69 | :execute
70 | @rem Setup the command line
71 |
72 | set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
73 |
74 | @rem Execute Gradle
75 | "%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
76 |
77 | :end
78 | @rem End local scope for the variables with windows NT shell
79 | if "%ERRORLEVEL%"=="0" goto mainEnd
80 |
81 | :fail
82 | rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
83 | rem the _cmd.exe /c_ return code!
84 | if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
85 | exit /b 1
86 |
87 | :mainEnd
88 | if "%OS%"=="Windows_NT" endlocal
89 |
90 | :omega
91 |
--------------------------------------------------------------------------------
/MultiMenuSelectDemo/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | MultiMenuSelect
2 | =============
3 |
4 | 三级或多级选择菜单,支持左右滑动!目前只写了一个三级的demo,不过有了这个实现4级及以上会很容易了
5 | 如图:
6 |
7 | 
8 |
--------------------------------------------------------------------------------
/image/screenshot.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/arlong/MultiMenuSelect/7060cd703191b812f2a332a2110207b82f2f6e0d/image/screenshot.gif
--------------------------------------------------------------------------------