我正在研究字典应用程序。我有一个启用快速滚动的列表视图和实现 SectionIndexer 的适配器。当我使用中文字典时,我有更多的部分,然后使用西欧语言并有一个小问题:
如果我停止快速滚动并且当滚动条可见时开始使用默认滚动我的“快速滚动滚动器”立即移动到另一个位置(在顶部的某个位置)并且只有当我快到列表的末尾时它才会开始也以更快的速度移动到我的位置。
这种行为有原因吗?使用默认滚动时是否有任何方法可以隐藏快速滚动条(但不禁用快速滚动)?
我正在研究字典应用程序。我有一个启用快速滚动的列表视图和实现 SectionIndexer 的适配器。当我使用中文字典时,我有更多的部分,然后使用西欧语言并有一个小问题:
如果我停止快速滚动并且当滚动条可见时开始使用默认滚动我的“快速滚动滚动器”立即移动到另一个位置(在顶部的某个位置)并且只有当我快到列表的末尾时它才会开始也以更快的速度移动到我的位置。
这种行为有原因吗?使用默认滚动时是否有任何方法可以隐藏快速滚动条(但不禁用快速滚动)?
以为我会在这里发帖,希望还为时不晚。
注意:这不是使用 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();
}
希望能帮助到你!