2013-02-05 42 views
5

在android setFastScrollEnabled(true);中用於製作ListView快速滾動。在Android框架源代碼中啓用快速滾動的Android Listview代碼

ListView中的項目較少時,此快速滾動不起作用。我在某處看到,只有當listview總高度是listview可見高度的4倍或更多時,才能在android中快速滾動。我花了數小時試圖在框架源代碼中找到它,但我無法找到它。

有人可以指出我在Android框架源代碼中的位置,當禁用快速滾動條件時ListView中的項目較少。

回答

8

是ofcourse,這裏是鏈接:

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

這是線224-227之間的condidion。而對於設置將需要多少頁顯示快速滾動,有一個不斷:

private static int MIN_PAGES = 4; 

和有關禁用它...這是一個私有字段,這樣就沒有簡單的方法來做到這一點。您可以嘗試使用反射或基於原始創建自定義FastScroller。 但我認爲simpliest方式是在這個condidion在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

感謝設置屬性

android:fastScrollAlwaysVisible="true" 

在你的ListView XML。 – anujprashar

0

你可以嘗試爲您詳細的答覆