5

在androidsetFastScrollEnabled(true);中用于ListView快速滚动。

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

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

4

2 回答 2

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");
}

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

于 2013-02-05T14:09:28.027 回答
0

您可以尝试设置属性

android:fastScrollAlwaysVisible="true"

在你的列表视图 xml

于 2016-06-23T06:27:20.490 回答