SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑

转载 2016年05月30日 20:47:21

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

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

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



getSectionForPosition(0) 返回 0

getSectionForPosition(1) 返回 0

getSectionForPosition(2) 返回 0

getSectionForPosition(3) 返回 1

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

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

[java] view plain copy
  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.       });    

相关文章推荐

SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑

大家在做字母索引的时候常常会用到SectionIndexer这个类,里面有2个重要的方法 1.   getSectionForPosition()通过该项的位置,获得所在分类组的索引号 2. ge...

SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑

大家在做字母索引的时候常常会用到SectionIndexer这个类,里面有2个重要的方法 1.   getSectionForPosition()通过该项的位置,获得所在分类组的索引号 2. ge...
  • Jack_l1
  • Jack_l1
  • 2013年11月05日 14:23
  • 11551

侧边快速滑动搜索的SectionIndexer接口简单使用

今天刚用到SectionIndexer,记录下来也算是个笔记。 当我们使用侧边快速滑动,比如RecyclerViewFastScroller库,就要自己在adapter中继承SectionIndexe...

SideBarDemo_SectionIndexer

  • 2016年06月22日 12:48
  • 6.82MB
  • 下载

Android7.0中文文档(API)-- SectionIndexer

Android中文文档 SectionIndexer
  • yrj
  • yrj
  • 2017年06月20日 11:02
  • 400

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

游标ListView,提供索引标签,使用户能够快速定位列表项。       也可以叫索引ListView,有的人称也为Tweaked ListView,可能更形象些吧。       一看图啥都懂了...

带你解惑【Retrofit2 的使用以及配合RxJava的使用】

最近刚离职,前几天参加的一个面试被问到对Retrofit的使用是否了解,无奈,,确实没怎么用过。。上网一搜,什么??还没使用Retrofit2你就out了!!!被这几个大字赤裸裸的嘲讽了。好吧,还是先...

iOS开发之移动直播技术秒开、直播优化经验、直播问题解析、直播知识解惑

本文由徐立在高可用架构群分享,来自高可用架构「 ArchNotes 」 现今移动直播技术上的挑战要远远难于传统设备或电脑直播,其完整的处理环节包括但不限于:音视频采集、美颜/滤镜...

UML解惑:图说UML中的六大关系

http://www.uml.org.cn/oobject/201006114.asp UML定义的关系主要有六种:依赖、类属、关联、实现、聚合和组合。这些类间关系的理解和使用是掌握和应...
  • funi16
  • funi16
  • 2013年05月24日 14:48
  • 747

十大面试问题解惑,秒杀一切HR、技术面试

最能体现求职者能力的就是面试,能不能拿到Offer,取决于你面试时的表现,只有有准备才能在面试过程中游刃有余。小编收集了10个面试官最爱提的问题,虽然题目千变万化,但是万变不离其宗,只要掌握了答题的技...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑
举报原因:
原因补充:

(最多只允许输入30个字)