用于在Android框架源代码中启用Fast Scroll的Android Listview代码

时间:2013-02-05 13:14:43

标签: android android-listview

在android setFastScrollEnabled(true);中用于快速滚动ListView

ListView中的项目较少时,此快速滚动不起作用。我在某处读到,只有当listview总高度是listview可见高度的4倍或更多时,android中的快速滚动才有效。我花了好几个小时试图在框架源代码中找到它,但我无法找到它。

有人可以指向我放置在android框架源代码中,当ListView中的项目较少时,此条件禁用快速滚动。

2 个答案:

答案 0 :(得分:8)

是的,这是链接:

http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/1.5_r4/android/widget/FastScroller.java

这是第224-227行之间的条件。并且为了设置显示快速滚动所需的页数,有一个常量:

private static int MIN_PAGES = 4;

关于禁用它...这是一个私人领域,所以没有简单的方法去做。您可以尝试使用反射或基于原始创建自定义FastScroller。 但我认为最简单的方法是在Android代码中检查这个条件:

//pseudocode
int numberOfPages = listView.itemsCount / listView.visibleItemsCount;
if(numberOfPages > yourValue)
    listView.setFastScrollEnabled(true);
else
    listView.setFastScrollEnabled(false);

但它可能只有在yourValue大于4时才有效。如果你想用更少的值来做,那么你需要使用反射或创建自定义类。

编辑:

对于最新版本,有链接: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/widget/FastScroller.java/

线条是444-447:)

对于反思,我会尝试这样的事情:

try {
Field scrollerField = AbsListView.class.getDeclaredField("mFastScroller");    //java.lang.reflect.Field
scrollerField.setAccessible(true);
FastScroller instance = scrollerField.get(listViewInstance);

Field minPagesField = instance.getClass().getDeclaredField("MIN_PAGES");
minPagesField.setAccessible(true);
minPagesField.set(instance, yourValue);
} catch (Exception e) {
Log.d("Error", "Could not get fast scroller");
}

它没有经过测试,所以我不知道它是否真的有用。

答案 1 :(得分:0)

您可以尝试设置属性

android:fastScrollAlwaysVisible="true"
列表视图中的

xml