ListView快速滚动条错误

时间:2013-02-01 14:26:11

标签: android listview adapter fastscroll sectionindexer

我正在从事字典申请。我有一个启用快速滚动的listview和实现SectionIndexer的适配器。当我使用中文字典时,我在使用西欧语言时有更多的部分,并且有一个小问题:

  

如果我停止快速滚动并且滚动条可见则开始使用   默认滚动我的“快速滚动滚动条”迫不及待地移动到   另一个位置(在顶部的某个位置),只有当我几乎得到的时候   在列表的末尾它也将开始移动到我的位置   更快的速度。

这种行为有原因吗?如果有任何方法在使用默认滚动时隐藏快速滚动条(但不禁用快速滚动)?

1 个答案:

答案 0 :(得分:0)

以为我会在这里发帖,希望不会太晚。

注意:这不是使用AlphabetIndexer,我不认为使用三个集合来管理列表是一个好主意,虽然它很简单,并解释了这个概念。

以下是如何使用回调的基本示例:

public LinkedHashMap<Integer,String> sectionList = new LinkedHashMap<Integer,String>();
public HashMap<Integer,Integer> sectionPositions = new HashMap<Integer, Integer>();
public HashMap<Integer,Integer> positionsForSection = new HashMap<Integer, Integer>();  

如果你有“位置”数组(已预订),这将创建三个哈希映射来跟踪事物,真正简​​单的实现,非常容易阅读:

 if( locations != null && locations.size() > 0 ) {
    //Iterate through the contacts, take the first letter, uppercase it, and use that as a key to reference the alphabetised list constructed above. 
    for( int i = 0; i < locations.size(); i++ ) {
        String startchar =locations.get(i).getStartCharacterForAlphabet();

        if( startchar != null ) {
            if( sectionList.containsValue(startchar) == false ) {
                sectionList.put(Integer.valueOf(i),startchar);
                positionsForSection.put(Integer.valueOf(sectionList.size() - 1), Integer.valueOf(i));
            }
        }

        sectionPositions.put(Integer.valueOf(i), sectionList.size() - 1);
    }  
}   

以下是三个回调:

@Override
public int getPositionForSection(int section) {
    return positionsForSection.get(Integer.valueOf(section)).intValue();
}

@Override
public MyLocation getItem(int position) {
    if( locations.size() > position ) {
        return locations.get(position);
    }

    return null;
}

@Override
public int getSectionForPosition(int position) {
    return sectionPositions.get(Integer.valueOf(position)).intValue();
}

希望它有所帮助!