zoukankan      html  css  js  c++  java
  • SectionIndexer中的getSectionForPosition()与getPositionForSection()解惑

     

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

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

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



    getSectionForPosition(0) 返回 0

    getSectionForPosition(1) 返回 0

    getSectionForPosition(2) 返回 0

    getSectionForPosition(3) 返回 1

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

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

    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.       });    
  • 相关阅读:
    中煜软件,数据库删除凭证
    excel vba获取拼音
    windows server 2012 R2 远程桌面授权模式尚未配置
    用C语言实现窗口抖动
    java修饰符
    Java对象和类
    Java基本语法
    Java开发环境笔记
    我的第一个Java程序和Java简介
    笔记本如何设置插入USB鼠标自动禁用触摸板
  • 原文地址:https://www.cnblogs.com/xgjblog/p/3878770.html
Copyright © 2011-2022 走看看