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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值