自定义控件--快速索引(二)

来源:互联网 发布:软件自动升级方案设计 编辑:程序博客网 时间:2024/04/30 01:32

昨天讲了快速索引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;}

最后的效果


最后在回调监听中,设置选中条目

@Overridepublic 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上,明天会对这个自定义控件进行一些优化,让用户去设置自定义控件的背景颜色,字体大小等等,然后上传到库中,以后想用只要依赖一下即可从仓库中拉取下来,明天有时间就会讲解

0 0
原创粉丝点击