2012-10-12 35 views
5

Như đã đề cập here, GridView.scrollTo() của Android không hoạt động. Phương pháp giải pháp được đề cập, setSelectedPosition, dường như không tồn tại trong GridViewcách giải quyết cho GridView.scrollTo()?

smoothScrollToPosition hoạt động nhưng tôi thực sự không muốn hoạt ảnh.

Đối với ngữ cảnh, tôi có CursorAdapter -backed GridView và tôi muốn chế độ xem "đặt lại", tức là cuộn lên trên cùng, khi tôi thay đổi con trỏ.

Trả lời

23

Tôi đã sử dụng setSelection(int position) cho điều này và có vẻ như chỉ hoạt động tốt. Để cuộn lên trên cùng, chỉ cần sử dụng 0 cho vị trí.

Từ các tài liệu:

Nếu trong chế độ cảm ứng, mặt hàng sẽ không được lựa chọn nhưng nó vẫn sẽ được bố trí một cách thích hợp.

Edit: Added mã để gửi setSelection như một Runnable:

albumsView.post(new Runnable() { 
    @Override 
    public void run() { 
     albumsView.setSelection(0); 
    } 
}); 
+0

Tôi đã thử điều đó, không có may mắn. Bạn đang sử dụng CursorAdapter? Dù sao cũng cảm ơn bạn. – gatoatigrado

+0

Không, chỉ là phần mở rộng BaseAdapter. Bạn đang thử nó trước hoặc sau khi bạn thay đổi con trỏ? Tôi không chắc nó tạo ra sự khác biệt, nhưng sau đó tôi không thể thấy tại sao sử dụng CursorAdapter thay vì bất cứ điều gì khác sẽ tạo ra sự khác biệt khi chỉ cần cuộn. – Geobits

+0

Cuộc gọi tốt, cảm ơn bạn rất nhiều !! Tôi đã đùa giỡn với điều này trong một thời gian dài. (nghĩa đen, giờ và giờ). Rõ ràng đã có một vấn đề khi cả hai gọi setSelection() và changeCursor(). Thứ tự của setSelection() và changeCursor không quan trọng (cả hai thất bại nếu chỉ được gọi trực tiếp theo thứ tự), nhưng nó hoạt động để gửi lại setSelection() [http://pastebin.com/XmM5jqD3]. Xin vui lòng cập nhật câu trả lời của bạn với dán đó :) – gatoatigrado

1

Tôi đã tìm thấy rằng để cách đáng tin cậy sử dụng gridView.setSelection (index), tôi phải đầu tiên gọi GridView. setAdapter() (ngay cả khi bộ điều hợp đã được thiết lập và không thay đổi). Giống như vậy:

gridView.setAdapter(gridAdapter); 
gridView.setSelection(index); 
+0

Gọi setAdapter sẽ luôn dẫn đến sự xuất hiện của di chuyển lên đầu khi bộ điều hợp hiện có được kéo mạnh và thay thế bằng bộ mới. Hệ điều hành này không tốt cho hiệu suất và bạn nên cố gắng điều khiển bộ điều hợp hiện có. – slott

+1

@slott sai. Nếu bộ điều hợp đã được thiết lập, điều này không dẫn đến việc đặt lại. Tôi không nói gì về việc tạo bộ điều hợp mới hoặc tháo bộ điều hợp cũ. Tất cả những gì tôi nói là, theo kinh nghiệm của mình, tôi phải gọi lại setAdapter * ngay cả khi bộ điều hợp đã được thiết lập * để setSelection hoạt động một cách đáng tin cậy. – mikejonesguy

+0

Tôi đã thử các cách tiếp cận khác ở đây và đây là phương pháp duy nhất hoạt động. Tôi đã thiết lập một bộ lọc trên bộ điều hợp và muốn GridView quay trở lại đầu trang. Mặc dù dữ liệu được đặt lại chính xác, hình ảnh đôi khi hiển thị sai ảnh trong lần xem hình ảnh. Cảm ơn @mikejonesguy – bkurzius

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