• 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.       });    
  • 相关阅读:
    oracle 11g SKIP_UNUSABLE_INDEXES参数
    oracle /*+ SYS_DL_CURSOR */ 这个hint
    各种存储的访问延时数量级备忘参考
    linux交换区使用过多导致的性能问题
    JSch : channel never closed or EOF 通道未关闭
    The Architecture of Open Source Applications: Berkeley DB
    vs变量监视提示-VAR-CREATE: UNABLE TO CREATE VARIABLE OBJECT解决方法
    centos 6.5 gdb 7.10安装make[5]: *** [install-bfdincludeHEADERS] Error 1解决
    oracle 11g禁用和强制direct path read
    sqlloader parallel调用报ORA-26002: table has index defined upon it.解决方法
  • 原文地址:https://www.cnblogs.com/xgjblog/p/3878770.html
Copyright © 2020-2023  润新知