2010-01-25 36 views
26

Tôi đang sử dụng nó, nhưng nó luôn trả về 0, mặc dù tôi đã cuộn đến cuối danh sách.Android: ListView.getScrollY() - nó có hoạt động không?

+1

Nếu những gì bạn đang tìm kiếm là số điểm ảnh biến mất ở đầu danh sách khi người dùng cuộn xuống, hãy xem [câu trả lời của tôi ở đây] (http://stackoverflow.com/questions/10808387/android- get-exact-scroll-position-in-listview/13415273 # 13415273) – Maria

+0

[giải pháp] chính xác (http://stackoverflow.com/questions/12727594/android-listview-current-scroll-location-y-pixels/35594825 # 35594825) – Sarasranglt

Trả lời

31

getScrollY() thực sự là một phương thức trên Chế độ xem chứ không phải là Chế độ xem danh sách. Nó đề cập đến số lượng cuộn của toàn bộ khung nhìn, vì vậy nó sẽ hầu như luôn luôn là 0.

Nếu bạn muốn biết nội dung của ListView được cuộn bao xa, bạn có thể sử dụng listView.getFirstVisiblePosition();

+0

cảm ơn người đàn ông :) thực sự giải thích rất nhiều :) – cV2

+8

Lưu ý rằng getFirstVisiblePosition sẽ trả về * mục * chứ không phải * vị trí *, vì vậy nó không phải là thứ bạn có thể sử dụng làm phương án thay thế cho getScrollY ngoại trừ trường hợp tất cả các mục danh sách chính xác cùng chiều cao. –

+0

Có phải vị trí của scroolview ở đầu chế độ xem hoặc cuối cùng không? –

4

Nó hoạt động, nó trả về phần trên cùng của phần được cuộn của chế độ xem tính bằng pixel từ đầu chế độ xem hiển thị. Xem tài liệu getScrollY(). Về cơ bản nếu danh sách của bạn đang chiếm toàn bộ khung nhìn thì bạn sẽ luôn nhận được 0, bởi vì phần đầu của phần cuộn của danh sách luôn ở đầu màn hình.

gì bạn muốn làm để xem nếu bạn đang ở cuối danh sách là một cái gì đó như thế này:

public void onCreate(final Bundle bundle) { 
    super.onCreate(bundle); 
    setContentView(R.layout.main); 
    // The list defined as field elswhere 
    this.view = (ListView) findViewById(R.id.searchResults); 
    this.view.setOnScrollListener(new OnScrollListener() { 
      private int priorFirst = -1; 
      @Override 
      public void onScroll(final AbsListView view, final int first, final int visible, final int total) { 
       // detect if last item is visible 
       if (visible < total && (first + visible == total)) { 
        // see if we have more results 
        if (first != priorFirst) { 
         priorFirst = first; 
         //Do stuff here, last item is displayed, end of list reached 
        } 
       } 
      } 
    }); 
} 

Lý do cho sự truy cập priorFirst là đôi khi di chuyển các sự kiện có thể được tạo ra nhiều lần, vì vậy bạn chỉ cần phản ứng lần đầu tiên danh sách kết thúc.

Nếu bạn đang cố gắng thực hiện danh sách phát triển tự động, tôi khuyên bạn nên sử dụng tutorial này.

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