ListView实现SectionIndex,实现右侧栏字母的快速滑动

SectionIndexer是一个接口,实现这个接口可以使控件在快速滑动的时候出现一个提示框。比如ListView的提示框,如图所示:

首先说明的一件事是,这个大写的D及其边框、位置,是系统自己生成的,也就是SectionIndexer接口。我看网上有的大牛自己写一个方框放到屏幕上,控制显示及隐藏,可能是参照了相关源代码,也可能是自己相出了一种替代方式。但是这里,我的实验结果却是证明,SectionIndexer是可以自己出现这个提示View的。

好了,废话少说,说一下这个接口。

1 //存放索引提示信息,程序根据通讯录动态生成
2 private ArrayList sectionContentArray = new ArrayList();
3 //存放sectionContent的开始的位置
4 private ArrayList SectionIndics = new ArrayList();

上面定义了两个容器,一个是存放提示信息:比如A,B,C,D…..
另一个是存放这些信息的开始位置,比如A从第0个位置开始,B从第13个位置开始,C从第52个位置开始…..

好了,明白了这两个,下面就是向这两个容器中添加应该有的数据了,这个根据具体应用写具体的方法。我的方法可以看我的代码,我在这里就不啰嗦了,注释非常详细了已经
在这里我要特别说明一下,我的那个Demo实现了根据汉语获得英文首字母,但是做的不是太好,因为引入了第三方包,我建议提示框直接显示中文,这个我已经实现了,但是Demo中我并没有改过来,很容易改,我想你们也可以自己去改。方法就是获取所有通讯录姓名的第一个字符(汉字)。那样的 话listview打开速度很快并且符合国人习惯。

实现SectionIndexer接口,必须重写三个方法:

01 @Override
02 public Object[] getSections() {
03 //这个sections是一个提示信息列表
04 //每一个元素就是显示在方框中的字符
05 //设置之后,SectionIndexer接口会自动去现实
06 Object[] sections = newObject[sectionContentArray.size()];
07 for(int i = 0;i sections[i] = sectionContentArray.get(i);
08 }
09  
10 return sections;
11 }
12  
13 @Override
14 public int getPositionForSection(int section) {
15 //获得每一个section的头位置
16 //也就是每个字母在list中的第一个位置
17 //这个section的值变化区间应该是0-sections.length
18 //sections就是上一个函数中定义的Object[] sections
19 return SectionIndics.get(section);
20 }
21  
22 @Override
23 public int getSectionForPosition(int position) {
24 return 0;
25 }
 转载自 Liudroid的博客 ,作者:Liudroid
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值