SectionIndexer

大家在做字母索引的时候常常会用到SectionIndexer这个类,里面有2个重要的方法

1.   getSectionForPosition()通过该项的位置,获得所在分类组的索引号

2. getPositionForSection()       根据分类列的索引号获得该序列的首个位置

getSectionForPosition(0) 返回 0

getSectionForPosition(1) 返回 0

getSectionForPosition(2) 返回 0

getSectionForPosition(3) 返回 1

这下,明白这两个方法的区别了把

所以一般有如下代码,来确定是否滑动到了分类的首字母位置

[java] view plaincopy

  1. public void onScroll(AbsListView view, int firstVisibleItem, int visibleItemCount,
  2. int totalItemCount) {
  3. int section = indexer.getSectionForPosition(firstVisibleItem);  //获得索引号
  4. int nextSecPosition = indexer.getPositionForSection(section + 1);  //根据索引号获得下一个索引的初始位置
  5. if (firstVisibleItem != lastFirstVisibleItem) {
  6. MarginLayoutParams params = (MarginLayoutParams) titleLayout.getLayoutParams();
  7. params.topMargin = 0;
  8. titleLayout.setLayoutParams(params);
  9. title.setText(String.valueOf(alphabet.charAt(section)));
  10. }
  11. if (nextSecPosition == firstVisibleItem + 1) {  //若是下一个索引号的位置与当前所见的项+1,则进行位移
  12. View childView = view.getChildAt(0);
  13. if (childView != null) {
  14. int titleHeight = titleLayout.getHeight();
  15. int bottom = childView.getBottom();
  16. MarginLayoutParams params = (MarginLayoutParams) titleLayout
  17. .getLayoutParams();
  18. if (bottom < titleHeight) {
  19. float pushedDistance = bottom - titleHeight;
  20. params.topMargin = (int) pushedDistance;
  21. titleLayout.setLayoutParams(params);
  22. } else {
  23. if (params.topMargin != 0) {
  24. params.topMargin = 0;
  25. titleLayout.setLayoutParams(params);
  26. }
  27. }
  28. }
  29. }
  30. lastFirstVisibleItem = firstVisibleItem;
  31. }
  32. });
时间: 2024-10-07 10:53:25

SectionIndexer的相关文章

通过SectionIndexer实现微信通讯录

这里主要参考了使用SectionIndexer实现微信通讯录的效果 在这里做个记录 效果图 页面使用RelativeLayout,主要分为三个部分,match_parent的主listView,右边字母的SideBar,还有就是微信那种点击字母时浮动的一个TextView 布局: fragment_contacts.xml 1 <?xml version="1.0" encoding="utf-8"?> 2 <RelativeLayout xmln

自定义快速查找字母控件

效果图如下: 首先看看布局文件,自定义的控件中包含一个 ListView,用于显示具体的数据内容: <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"     android:layout_width="fill_parent"     a

Android之ListView的getItemViewType和getViewTypeCount

PS:感觉这两个方法其实还是很容易理解的,也算是给我其他两个朋友写的吧,帮他们搞清楚这两个方法的用法和概念.同时还有一些小细节问题需要注意. 学习内容: 1.getItemViewType和getViewTypeCount   getItemViewType和getViewTypeCount是ListView中实现复杂列表的两个相关的方法,普通的ListView中Item是相同的,那么我们只需要实现Adapter中四个抽象方法即可,但是如果页面中Item长得比较的复杂呢?比如说这个. 比如说这个

带滑动侧边栏的联系人界面

先上效果图,呵呵,首先说明这个效果本人还是比较满意的~ 首先来分析一下页面元素的,其实就是左侧的一个listview和右侧的一个自定义linearlayout,右侧部分进行滑动时,左侧的联系人可以随着字母进行移动. 这个效果用到的知识还是挺多的.然而“青青翠竹无非般若,郁郁黄花皆是妙谛”,认清了事务的内在规律都是不难,接着允许本人讲一下~ 1.普及知识,汉字转gb2312码和byte型数据 gb2312中的英文字符是与ascii码一致的,一个字节.汉字字符是两个字节,分为高八位和低八位:高字节的

App列表之游标ListView(索引ListView)

游标ListView,提供索引标签,使用户能够快速定位列表项.      也可以叫索引ListView,有的人称也为Tweaked ListView,可能更形象些吧.      一看图啥都懂了: 1.游标(Fast scroll thumb)      就是右边的那个拖动的方块,这个非常的简单: 1 2 3 4 5 <ListView     android:id="@+id/tweaked_list"     android:layout_width="fill_pa

Android系统联系人全特效实现(上),分组导航和挤压动画

本文首发于CSDN博客,转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/9033553 记得在我刚接触Android的时候对系统联系人中的特效很感兴趣,它会根据手机中联系人姓氏的首字母进行分组,并在界面的最顶端始终显示一个当前的分组.如下图所示: 最让我感兴趣的是,当后一个分组和前一个分组相碰时,会产生一个上顶的挤压动画.那个时候我思考了各种方法想去实现这种特效,可是限于功夫不到家,都未能成功.如今两年多过去了,自己也成长了很多,

android系统联系人分组特效实现(2)---字母表快速滚动

要实现这种功能,只需要在   android系统联系人分组特效实现(1)---分组导航和挤压动画  的基础上再加上一个自定义控件即可完成. 1.新建项目,继续新建一个java类,BladeView,用于作为导航栏 public class BladeView extends View { private Handler handler = new Handler(); public BladeView(Context context, AttributeSet attrs) { super(co

android系统联系人分组特效实现(1)---分组导航和挤压动画

1.打开activity_main.xml <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent&q

Android 实现ListView的A-Z字母排序和过滤搜索功能,实现汉字转成拼音

转载请注明出处:http://blog.csdn.net/xiaanming/article/details/12684155 前段时间因为换工作的缘故又恰巧碰到国庆节,所以有段时间自己没有更新博客了,过完国庆到新公司报道,感觉还不错,就是现在住的地方离新公司有点远,地铁20站,伤不起啊,我每天早上7点多就要起床,然后屁颠屁颠的去挤地铁上班,晚上下班还要挤地铁,先不说路程远,车费一天就要10几块,我的银子啊,有坐龙华线去上班的深圳程序员不?听说那条线上班高峰期很挤?我没在上班高峰期坐过那趟车,我