2012-04-15 21 views
6

Tôi cần phải hoàn toàn vô hiệu hóa overscroll trong listviews của tôi vì vậy tôi có thể thực hiện chức năng overscroll riêng của tôi.Vô hiệu hóa danh sách overscroll trên Samsung Galaxy Tab 2.3.3 android

Dường như đủ đơn giản khi xem các lớp listview cốt lõi, chỉ cần đặt chế độ overscroll thành OVERSCROLL_NEVER. Điều này làm việc tốt trên Samsung Galaxy s2 của tôi. Nhưng không hoạt động Đối với Galaxy Tab 2.3.3.

Có ai có nhiều kinh nghiệm với các tùy chỉnh của Samsung ListView có thể giúp tôi không?

Trả lời

2

Bạn phải đặt chiều cao của chế độ xem danh sách thành giá trị sửa lỗi. Nếu nội dung của bạn là tự động có một chức năng tốt đẹp để đo listsize thực tế sau khi cài đặt lại adapter:

public static void setListViewHeightBasedOnChildren(ListView listView) { 
    ListAdapter listAdapter = listView.getAdapter(); 
    if (listAdapter == null) { 
     // pre-condition 
     return; 
    } 

    int totalHeight = 0; 
    int desiredWidth = MeasureSpec.makeMeasureSpec(listView.getWidth(), MeasureSpec.AT_MOST); 
    for (int i = 0; i < listAdapter.getCount(); i++) { 
     View listItem = listAdapter.getView(i, null, listView); 
     listItem.measure(desiredWidth, MeasureSpec.UNSPECIFIED); 
     totalHeight += listItem.getMeasuredHeight(); 
    } 

    ViewGroup.LayoutParams params = listView.getLayoutParams(); 
    params.height = totalHeight + (listView.getDividerHeight() * (listAdapter.getCount() - 1)); 
    listView.setLayoutParams(params); 
    listView.requestLayout(); 
} 

bạn phải gọi phương thức tĩnh này với listview của bạn như paramter sau khi thiết lập adapter của bạn. Bây giờ bạn có thể thêm một scrollview (bên trong là listview của bạn và quan điểm khác). Tôi sẽ nói hành vi này trong 2.3.3 trước đó là một lỗi nhỏ ... không có cách nào dễ dàng để bao gồm listview bên trong một scrollview ngoại trừ cách tôi mô tả. Vì lý do đó, họ đã giới thiệu chế độ OVERSCROLL_NEVER :)

Mã từ DougW!

3

Nó làm việc cho tôi trên Samsung Galaxy Tab (với Android 2.2):

try { 

    // list you want to disable overscroll 
    // replace 'R.id.services' with your list id 
    ListView listView = ((ListView)findViewById(R.id.services)); 

    // find the method 
    Method setEnableExcessScroll = 
      listView.getClass().getMethod("setEnableExcessScroll", Boolean.TYPE); 

    // call the method with parameter set to false 
    setEnableExcessScroll.invoke(listView, Boolean.valueOf(false)); 

} 
catch (SecurityException e) {} 
catch (NoSuchMethodException e) {} 
catch (IllegalArgumentException e) {} 
catch (IllegalAccessException e) {} 
catch (InvocationTargetException e) {} 
+0

Brilliant !!! Điều này thực sự giúp tôi tiết kiệm rất nhiều rắc rối. Làm cách nào bạn biết tên phương thức cần tìm kiếm, API S2 có công khai không? – npace

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