Đây là kịch bản: Tôi có một ListView đơn giản hiển thị nguồn cấp dữ liệu twitter. Tôi có một CursorAdapter đó là lấy tweets từ sqlite. Khi tôi gọi hàm requery() trên con trỏ của mình, tôi hy vọng rằng các mẩu tin mới sẽ được tìm nạp từ đó đã được thêm vào cơ sở dữ liệu. Điều này tất cả hoạt động tốt, và các mục mới thậm chí có thể nhìn thấy trong ListView sau khi điều này xảy ra.Android ListView với CursorAdapter có vị trí cuộn không chính xác sau khi Requery được gọi khi các mục mới được thêm
Vấn đề là vị trí cuộn dường như được lưu dựa trên độ lệch vị trí mục. Vì vậy, hãy nói vị trí hiển thị đầu tiên trong ListView của tôi là 4. Khi tôi requery và 2 mục mới được thêm vào đầu danh sách, ListView giữ vị trí cuộn mục đầu tiên có thể nhìn thấy là 4, tuy nhiên vì có hai mục mới trong danh sách , Bây giờ tôi thấy một mục khác ở vị trí 4 hơn trước khi tôi làm mới. Hình ảnh này minh họa trước và sau:
Thông báo như thế nào Trước đây, Tweet D là mục có thể nhìn thấy đầu tiên và sau đó, Tweet B bây giờ trở thành mục có thể nhìn thấy đầu tiên.
Câu hỏi của tôi là, làm cách nào để giữ cùng một vị trí cuộn dựa trên positon của con trỏ khi gọi requery, sao cho trong ví dụ này, Tweet D vẫn sẽ là mục hiển thị đầu tiên sau khi yêu cầu?
Vấn đề chính của tôi với điều này là tất cả các mặt hàng của tôi không có cùng chiều cao, ví dụ: nếu một mục là một nửa hiển thị ... – Redth
Bạn đã thử chưa? Bởi vì ngay cả danh sách của tôi cũng có các hàng có chiều cao thay đổi. Nhưng hoạt động hoàn hảo. 'int top = v == null? 0: v.getTop(); 'Phần này thực sự xử lý trường hợp khi một mục có thể nhìn thấy một nửa. – Enigma