昨天讲了快速索引View的绘制流程,以及触摸事件的监听
今天将怎么把快速索引和listview利用起来形成类似联系人界面的效果,代码简单,不做太多讲解,最后会把源码上传到github上的
用法最重要的就是对listview进行字母排序,相同的进行合并!然后通过回调的函数中调用listview的setSelcter
数据源要进行排序,这里要注意需要对bean实现一个Comparable接口
private void addData(List<Person> persons) { for (int i = 0; i < NameConstans.NAME.length; i++) { persons.add(new Person(NameConstans.NAME[i])); } Collections.sort(persons); }
这里要用到一个中国人专用的jar包.奉上地址,具体的自己去看哈 http://download.csdn.net/download/wjw_java/6765939 将汉字转成拼音
效果是这样的
我们要把相同拼音的归到一个组下,顺便把字母和名字换个颜色好区分,listview中getView中的代码
public View getView(int position, View convertView, ViewGroup parent) { View view=null; if(convertView!=null){ view=convertView; }else{ view = View.inflate(parent.getContext(), R.layout.item_listview,null); } ViewHolder viewHolder=ViewHolder.getHolder(view); Person person = persons.get(position); String letter =null; if(position==0){ letter = person.getLetter();//首字母 }else{ String letter1 = persons.get(position - 1).getLetter(); if(!TextUtils.equals(letter1,person.getLetter())){ letter = person.getLetter(); } } viewHolder.index.setText(person.getLetter()); viewHolder.index.setVisibility(letter==null?View.GONE:View.VISIBLE); viewHolder.name.setText(person.getName()); return view; }
最后的效果
最后在回调监听中,设置选中条目
@Override public void OnUpdate(String str) { for (int i = 0; i < mPersons.size(); i++) { Person person = mPersons.get(i); if(person.getLetter().equals(str)){ //跳转到指定位置 mLv.setSelection(i); break; } } }
动态图就不上传了,源码会上传到github上,明天会对这个自定义控件进行一些优化,让用户去设置自定义控件的背景颜色,字体大小等等,然后上传到库中,以后想用只要依赖一下即可从仓库中拉取下来,明天有时间就会讲解