android通讯录根据首字母分组(二)
2015-09-18 21:01
633 查看
不打游戏了,继续写。
先看一看listView的适配器怎么写吧。
首先构造函数
这个类很吊,LetterComparator,,就是他把首字母一样的英雄名字放在一起的。比如:阿狸 和 艾希 首字母都是 a,,大兵和队友首字母都是d.通过这个去排序的。
然后就是Adapter最终要的getView()方法了。
这个方法很吊,聪明的像狗一样的我都快看不懂了,就不贴了 。看不懂就问我吧,呆会儿把源代码放上去的。
LIstVIew滑动监听,动态更新顶部TextView
这里的逻辑是,遍历屏幕上可见的几个条目,在Adapter中我们给每个条目都设置了一个Tag,在这里我们就是根据这个Tag,得到我们的顶部TextView应该显示的字母。
给顶部的EditText设置文字改变监听,然后循环遍历,得到我们想要的数据,通知适配器刷新数据。
好吧,如果我看这样的博客,我是看不懂的,把源代码发上来,要看的自己看的,不懂的女程序员私聊,男的自己debug。
女神镇楼。写的不好,不要骂我,我小学生。
链接奉上。
听说点这里可以下载源码
先看一看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。
女神镇楼。写的不好,不要骂我,我小学生。
链接奉上。
听说点这里可以下载源码
相关文章推荐
- android使用自定义字体
- Android4.1添加新的按键(2)
- Android4 .1添加新的按键(1)
- Android4.1添加新的按键(3)
- android下载图片显示总结
- Android开发环境的调研
- Android之ADB常用命令
- 弄明白Android 接口回调机制
- Android Studio配置Esri ArcGIS
- Android四大组件
- android通讯录根据首字母分组(一)
- 使用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搞晕了~~