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

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

2015-09-18 21:01 633 查看
不打游戏了,继续写。

先看一看listView的适配器怎么写吧。

首先构造函数

public MyAdapter(JSONArray dataList ,LetterComparator lc,Context context) {
Collections.sort(dataList, lc);
this.dataList = dataList;
this.lc = lc;
this.context = context;
Class drawable = R.drawable.class;
fields = drawable.getFields();
}


这个类很吊,LetterComparator,,就是他把首字母一样的英雄名字放在一起的。比如:阿狸 和 艾希 首字母都是 a,,大兵和队友首字母都是d.通过这个去排序的。

public class LetterComparator implements Comparator {

@Override
public int compare(Object lhs, Object rhs) {
JSONObject c1 = (JSONObject) lhs;
JSONObject c2 = (JSONObject) rhs;
Collator myCollator = Collator.getInstance(java.util.Locale.ENGLISH);
if (myCollator.compare(c1.getString("SZM"), c2.getString("SZM")) < 0)
return -1;
else if (myCollator.compare(c1.getString("SZM"), c2.getString("SZM")) > 0)
return 1;
else
return 0;
}
}


然后就是Adapter最终要的getView()方法了。

这个方法很吊,聪明的像狗一样的我都快看不懂了,就不贴了 。看不懂就问我吧,呆会儿把源代码放上去的。

LIstVIew滑动监听,动态更新顶部TextView

//listView的滑动监听
private class MyScrollListener implements OnScrollListener {

@Override
public void onScroll(AbsListView view, int firstVisibleItem,
int visibleItemCount, int totalItemCount) {

ListView listview = (ListView) view;

if (firstVisibleItem >= 0) {
for (int i = 0; i < visibleItemCount; i++) {
ViewGroup convertView = (ViewGroup) listview.getChildAt(i);  //遍历得到所有可见的item

if (convertView != null) {
group_index.setText(convertView.getTag(R.id.tag)
.toString());
break;
}
}
}
}

@Override
public void onScrollStateChanged(AbsListView view, int scrollState) {

}
}


这里的逻辑是,遍历屏幕上可见的几个条目,在Adapter中我们给每个条目都设置了一个Tag,在这里我们就是根据这个Tag,得到我们的顶部TextView应该显示的字母。

private void searchContent(String keyWord) {
if(!keyWord.isEmpty()){
JSONArray tempArray = new JSONArray();
for(int i = 0;i<dataList.size();i++){
JSONObject object = dataList.getJSONObject(i);
//检索电话
String mobile = object.getString("mobilemobile");
if(mobile != null){
if(isNumber(mobile) && mobile.contains(keyWord)){
tempArray.add(object);
continue;
}
}
//检索首字母
String firstZM = object.getString("firstZM");
if(mobile != null){
if(keyWord.length() == 1 && keyWord.toUpperCase().equals(firstZM)){
tempArray.add(object);
continue;
}
}
//检索汉字
String CN = object.getString("CN");
String  a = CN.charAt(0)+"";

if(mobile != null){
if(keyWord.equals(a)){
tempArray.add(object);
continue;
}
}
}
dataList.clear();
dataList.addAll(tempArray);
Collections.sort(dataList, lc);
adapter.notifyDataSetChanged();
}else{
dataList.clear();
dataList.addAll(jsonArray);
Collections.sort(dataList, lc);
adapter.notifyDataSetChanged();
}
}


给顶部的EditText设置文字改变监听,然后循环遍历,得到我们想要的数据,通知适配器刷新数据。

好吧,如果我看这样的博客,我是看不懂的,把源代码发上来,要看的自己看的,不懂的女程序员私聊,男的自己debug。

女神镇楼。写的不好,不要骂我,我小学生。

链接奉上。

听说点这里可以下载源码

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: