android通讯录根据首字母分组(一)
2015-09-18 20:32
471 查看
先上几张效果图,装装比
开始代码了,第一步
写好布局XML文件,在MainActivity中定义一个索引数组,然后在代码中给最右侧竖直方向的LinearLayout动态的添加一个个TextView,TextView里面写上对应的索引值。
第二步
党的领导人数据是不能随便暴露的,所以这里只有自己模拟一个数据Json数据了,,需要使用阿里巴巴的fastJson去解析数据。模拟的数据结构存在HeroJson类中,大致如下图:
由于数据有点多,我在解析的时候开了一个线程,用handler去操作数据。解析完后,发送一个消息给handler,在handler里面给listView设置一个adapter.
解析json的时候有很重要的一步,给json中的每个object添加数据,就是
setSZM(dataList);这个方法。使用这个方法需要用到pinyin4J包,使用这个包得到每个英雄人物的首字母,全拼等,,用来判断我们每个item的位置。
哎,等等,打盘游戏去回来再写。
开始代码了,第一步
写好布局XML文件,在MainActivity中定义一个索引数组,然后在代码中给最右侧竖直方向的LinearLayout动态的添加一个个TextView,TextView里面写上对应的索引值。
/** 字母索引表 */ public String[] Index = { "#", "A", "B", "C", "D", "E", "F", "G", "H", "I","J", "K", "L", "M", "N", "O", "P", "Q", "U", "V", "W", "X", "Y","Z" };
//在代码里添加ABCDEFG.....到右边的布局中 private void addIndexView() { for (int i = 0; i < Index.length; i++) { TextView textView = new TextView(this); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); textView.setLayoutParams(params); textView.setText(Index[i]); textView.setTextSize(16); textView.setGravity(Gravity.CENTER_HORIZONTAL); indexPanel.addView(textView); } }
第二步
党的领导人数据是不能随便暴露的,所以这里只有自己模拟一个数据Json数据了,,需要使用阿里巴巴的fastJson去解析数据。模拟的数据结构存在HeroJson类中,大致如下图:
由于数据有点多,我在解析的时候开了一个线程,用handler去操作数据。解析完后,发送一个消息给handler,在handler里面给listView设置一个adapter.
//解析json private void resolveJson(final String value) { Thread thread = new Thread(new Runnable() { @Override public void run() { JSONObject object = JSON.parseObject(value); jsonArray = object.getJSONArray("DATA"); dataList = new JSONArray(); dataList.addAll(jsonArray); setSZM(dataList); handler.sendEmptyMessage(2); } }); thread.start(); };
private Handler handler = new Handler() { @Override public void handleMessage(android.os.Message msg) { if (msg.what == 1) { String value = msg.obj.toString(); Log.i("西门大JJ", value); resolveJson(value); } else { adapter = new MyAdapter(dataList,lc,MainActivity.this); totalUser.setText("共"+dataList.size()+"人"); lv.setAdapter(adapter); } } };
解析json的时候有很重要的一步,给json中的每个object添加数据,就是
setSZM(dataList);这个方法。使用这个方法需要用到pinyin4J包,使用这个包得到每个英雄人物的首字母,全拼等,,用来判断我们每个item的位置。
/** * 创建获取汉字首字母,并添加到JsonArray里面去 * * @param datalist */ private void setSZM(JSONArray datalist) { for (int i = 0; i < datalist.size(); i++) { JSONObject o = datalist.getJSONObject(i); String name_cn = o.getString("CN"); //String quanPin = Pinyin4j.toPinYin(hanzi); String quanPin = getPinYin(name_cn); // 获取汉字首字母 String szm = Pinyin4j.getSZM(name_cn).toUpperCase(); String firstZM = String.valueOf(szm.charAt(0)).toUpperCase(); // 添加进去 o.put("firstZM", firstZM); o.put("SZM", szm); o.put("quanPin", quanPin); } }
哎,等等,打盘游戏去回来再写。
相关文章推荐
- 使用AutoCompleteTextView和MultiAutoCompleteTextView实现输入自动匹配
- Android——Hander和AsyncTask的使用
- Android四大组件——Service详解
- Android内存管理、Android中Dalvik和JVM的区别
- ubuntu14.04下载android source code
- android 开发 小技巧
- android log 日志管理
- Android 解决“com.android.dex.DexIndexOverflowException: method ID not in [0, 0xffff]: 65536”问题
- 你是不是也被Android Private Libraries、Referenced Libraries、android Dependency搞晕了~~
- Android 自定义View实现SlideSwitchView
- android:windowSoftInputMode属性详解
- android init.rc文件语法详解
- Android CheckBox实现SwitchButton
- android自定义组件(手机加速球+水面波动效果)
- android多媒体——5步学会使用系统相机
- Android-sqlite3 not found解决
- Android EditText监听只能输入2位小数
- android开发(45) 自定义软键盘(输入法)
- android github 资源地址
- android studio下使用getclassloader().getresourceasstream()的问题