您的位置:首页 > 移动开发 > Android开发

android通讯录根据首字母分组(一)

2015-09-18 20:32 471 查看
先上几张效果图,装装比











开始代码了,第一步

写好布局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);

}
}


哎,等等,打盘游戏去回来再写。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: