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
原创粉丝点击