2013-02-05 37 views
5

Trong android setFastScrollEnabled(true); được sử dụng để tạo cuộn nhanh ListView.Mã danh sách Android để bật Fast Scroll trong mã nguồn của khung công tác android

Cuộn nhanh này không hoạt động khi có ít mục hơn trong ListView. Tôi đọc nó ở đâu đó mà nhanh chóng di chuyển trong android hoạt động chỉ khi listview tổng chiều cao là 4 lần hoặc nhiều hơn listview nhìn thấy chiều cao. Tôi đã dành hàng giờ cố gắng tìm nó trong mã nguồn khung, nhưng tôi không thể tìm thấy nó.

Ai đó có thể chỉ cho tôi đặt trong mã nguồn khung android nơi điều kiện này để tắt nhanh khi có ít mục trong ListView.

Trả lời

8

Có ofcourse, đây là liên kết:

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

Đây là một condidion giữa các dòng 224-227. Và để đặt số lượng trang cần thiết để hiển thị cuộn nhanh, có một hằng số:

private static int MIN_PAGES = 4; 

Và về việc vô hiệu hóa nó ... Đó là trường riêng nên không có cách nào đơn giản để thực hiện. Bạn có thể thử sử dụng phản xạ hoặc tạo FastScroller tùy chỉnh dựa trên bản gốc. Nhưng tôi nghĩ rằng cách đơn giản nhất là để kiểm tra như thế nào trong condidion này trong mã Android:

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

Nhưng nó chỉ có thể làm việc nếu yourValue sẽ lớn hơn 4. Nếu bạn muốn làm điều đó cho các giá trị ít thì bạn cần để sử dụng sự phản chiếu hoặc tạo lớp tùy chỉnh.

EDIT:

Đối với phiên bản mới nhất có liên kết: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.1.1_r1/android/widget/FastScroller.java/

Và dòng là 444-447 :)

Và đối với phản xạ tôi sẽ cố gắng một cái gì đó như thế này:

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

Nó không được kiểm tra vì vậy tôi không biết nếu nó thực sự hoạt động.

+1

nhờ trả lời chi tiết của bạn. – anujprashar

0

Bạn có thể thử thiết lập các thuộc tính

android:fastScrollAlwaysVisible="true" 

trong xml listview của bạn

Các vấn đề liên quan