Vấn đề của tôi: ListView của tôi đặt lại vị trí cuộn của nó lên đầu bất cứ khi nào tôi cập nhật nội dung của nó thông qua SimpleCursorAdapter (tùy chỉnh) của nó. Tôi muốn ListView duy trì vị trí cuộn của nó khi được cập nhật.Cập nhật SimpleCursorAdapter trong khi duy trì vị trí cuộn trong ListView
Tôi bắt đầu bằng cách tạo phiên bản bộ điều hợp mới mỗi lần và sử dụng ListView.setAdapter()
, nhưng theo this discussion Tôi nên cập nhật bộ điều hợp thay vì đặt lại bộ điều hợp. Tôi không thể tìm thấy một cách để làm điều này cho SimpleCursorAdapter hoạt động chính xác. Dưới đây là một số điều tôi đã thử, bỏ qua các đối số phương thức:
- SimpleCursorAdapter.changeCursorAndColumns()
với con trỏ mới cập nhật thành công bộ điều hợp nhưng vẫn đặt lại vị trí cuộn.
- SimpleCursorAdapter.changeCursor()
hoạt động theo cùng một cách.
- SimpleCursorAdapter.swapCursor()
không khả dụng cho đến ngày 11 và tôi đang phát triển cho api 8.
- SimpleCursorAdapter.notifyDataSetChanged()
không cập nhật ListView. (Có thể có một bước khác mà tôi đang thiếu.)
- ListView.invalidate()
không cập nhật ListView.
- SimpleCursorAdapter.requery()
làm cho Chế độ xem danh sách trống và không được dùng nữa.
- Tôi quen thuộc với giải pháp ListView.setSelection()
, nhưng tôi không muốn ListView của mình chuyển động khi được cập nhật. Điều này đưa nó vào một vị trí trong danh sách.
Điều này có vẻ như nó phải là một vấn đề phổ biến và đơn giản. Có ai xử lý nó không?
Xem bình luận của tôi dưới đây là câu trả lời. SimpleCursorAdapter.changeCursor() hoạt động chính xác - Tôi vừa có một dòng mã khác để sửa đổi mọi thứ. – pvans