5

Androidでは、高速スクロールsetFastScrollEnabled(true);を行うために使用されます。ListView

のアイテムが少ない場合、この高速スクロールは機能しませんListView。Androidの高速スクロールは、リストビューの合計高さがリストビューの表示高さの4倍以上の場合にのみ機能することをどこかで読みました。フレームワークのソースコードでそれを見つけようと何時間も費やしましたが、見つけることができません.

ListViewのアイテムが少ないときに高速スクロールを無効にするこの条件をAndroidフレームワークのソースコードに配置するように誰かに指摘できますか?

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

ただし、4より大きくなる場合にのみ機能する可能性yourValueがあります。より少ない値で実行する場合は、リフレクションを使用するか、カスタムクラスを作成する必要があります。

編集:

最新バージョンについては、次のリンクがあります: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 に答える