SectionIndexer是一个接口,实现这个接口可以使控件在快速滑动的时候出现一个提示框。比如ListView的提示框,如图所示:
首先说明的一件事是,这个大写的D及其边框、位置,是系统自己生成的,也就是SectionIndexer接口。我看网上有的大牛自己写一个方框放到屏幕上,控制显示及隐藏,可能是参照了相关源代码,也可能是自己相出了一种替代方式。但是这里,我的实验结果却是证明,SectionIndexer是可以自己出现这个提示View的。
好了,废话少说,说一下这个接口。
2 | private ArrayList sectionContentArray = new ArrayList(); |
4 | private ArrayList SectionIndics = new ArrayList(); |
上面定义了两个容器,一个是存放提示信息:比如A,B,C,D…..
另一个是存放这些信息的开始位置,比如A从第0个位置开始,B从第13个位置开始,C从第52个位置开始…..
好了,明白了这两个,下面就是向这两个容器中添加应该有的数据了,这个根据具体应用写具体的方法。我的方法可以看我的代码,我在这里就不啰嗦了,注释非常详细了已经。
在这里我要特别说明一下,我的那个Demo实现了根据汉语获得英文首字母,但是做的不是太好,因为引入了第三方包,我建议提示框直接显示中文,这个我已经实现了,但是Demo中我并没有改过来,很容易改,我想你们也可以自己去改。方法就是获取所有通讯录姓名的第一个字符(汉字)。那样的 话listview打开速度很快并且符合国人习惯。
实现SectionIndexer接口,必须重写三个方法:
02 | public Object[] getSections() { |
06 | Object[] sections = new Object[sectionContentArray.size()]; |
07 | for ( int i = 0 ;i sections[i] = sectionContentArray.get(i); |
14 | public int getPositionForSection( int section) { |
19 | return SectionIndics.get(section); |
23 | public int getSectionForPosition( int position) { |
转载自
Liudroid的博客
,作者:Liudroid