android通讯录根据首字母分组(二)
来源:互联网 发布:微信直接跳转淘宝链接 编辑:程序博客网 时间:2024/05/20 18:46
不打游戏了,继续写。
先看一看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。
女神镇楼。写的不好,不要骂我,我小学生。
链接奉上。
听说点这里可以下载源码
0 0
- android通讯录根据首字母分组(二)
- android通讯录根据首字母分组(一)
- Android根据汉字拼音首字母定位和排序分组
- android 通讯录+首字母索引
- Android通讯录分组管理
- Android首字母索引排序通讯录
- 根据字符串首字母分组并内部排序
- android快速滑动列表+首字母提示(仿通讯录)
- iOS 中文首字母排序,通讯录排序,好友分组排序
- iOS 中文首字母排序,通讯录排序,好友分组排序
- android通讯录实例(二)
- Android通讯录之分组联系人
- Android通讯录之分组联系人
- android 仿微信联系人 首字母分组快速索引
- Android 首字母分组快速索引 自定义WaveSiderBarView
- 通讯录排序(按首字母顺序)
- Android通讯录模糊匹配搜索实现(号码、首字母、简拼、全拼)
- Android通讯录模糊匹配搜索实现(号码、首字母、简拼、全拼)
- DDMS files not found:hprof-conv.exe;The connection to adb is down, and a severe error has occured.
- 欢迎使用CSDN-markdown编辑器
- colspan,border-collapse,文本居中,文本框居中
- 【codevs1045】 奶牛的旅行 解题报告
- 互联网+
- android通讯录根据首字母分组(二)
- Java中类的继承和重写
- POJ 1743 Musical Theme(2.2 不可重叠最长重复子串)
- hdu4722
- 双向滑动(...)
- c++ primer读书笔记--第十六章 模板和泛型编程
- 通过Intent传递数据
- 标题hehehehe
- 我的计算器