2010-10-27 29 views
14

Tôi đang gặp sự cố với ListView của mình (sử dụng CursorAdapte r). Khi tôi gọi getListView().getLastVisiblePosition() Tôi đang nhận được -1. Đây là vấn đề kể từ khi danh sách của tôi được điền bằng các mục. Ngoài ra, getListView().getFirstVisiblePosition() luôn trả về 0, bất kể tôi cuộn vào đâu trong danh sách. Bất kỳ ý tưởng?getLastVisiblePosition trả lại -1

Nó có cái gì để làm với startManagingCursor

@Override 
    public void changeCursor(Cursor cursor) { 
     super.changeCursor(cursor); 
     MyActivity.this.mCursor = cursor; 
     //startManagingCursor(MyActivity.this.mCursor); 
    } 

Nếu tôi nhận xét ra startManagingCursor, mọi thứ đều hoạt động tốt. Tôi cũng đã thử thêm stopManagingCursor() trước khi thay đổi Cursor và vẫn gặp sự cố tương tự.

+0

Có ai có thể đưa ra bất kỳ ý tưởng bổ sung nào không? Id thực sự muốn sử dụng startManagingCursor – Andrew

+0

Chế độ xem danh sách đã được điền khi bạn gọi '.getLastVisiblePosition()'? –

Trả lời

0

Tôi đoán là các phương pháp getItem(int position)getItemId(int position) của bạn không được xác định chính xác trong bộ điều hợp của bạn.

+0

Chúng không được xác định. Họ không bao giờ có được. Đây là tất cả hoạt động tốt trước khi cho đến khi tôi bắt đầu sử dụng startManagingCursor (vì tôi đã nhận được lỗi "Hoàn tất một con trỏ chưa bị hủy kích hoạt hoặc đóng"). Tôi cũng không thấy hai phương pháp đó sẽ ảnh hưởng như thế nào đến điều này. Tôi đang yêu cầu Android cho vị trí hiển thị đầu tiên và cuối cùng; không cho dữ liệu. – Andrew

+0

Vâng, và tôi chắc chắn rằng getLastPosition() sử dụng 2 phương pháp đó để xác định thông tin đó – Falmarri

+0

Tại sao phải không? Ngoài ra, kể từ khi tôi không ghi đè các phương pháp này, tại sao tất cả mọi thứ sẽ làm việc tốt khi tôi không startManagingCursor, nhưng thất bại một khi tôi làm gì? Trong cả hai trường hợp, tôi đã không overrode những phương pháp này – Andrew

32

Điều này là do thời điểm bạn gọi getListView(). GetLastVisiblePosition() chế độ xem danh sách không được hiển thị. Bạn có thể thêm cuộc gọi vào hàng đợi tin nhắn của chế độ xem như sau:

listview.post(new Runnable() { 
    public void run() { 
     listview.getLastVisiblePosition(); 
    } 
}); 
+0

Man, cảm ơn rất nhiều cho việc này. – Yar

+0

Điều này có ý nghĩa .. Cảm ơn luciferleo. –

+0

Đây phải là câu trả lời được chấp nhận! – Virthuss

0

Thậm chí tôi cũng gặp phải vấn đề tương tự. Vấn đề là, getLastVisiblePosition() chỉ hoạt động khi bạn ở trong phần tử đầu tiên của listview của bạn và phần còn lại bạn sẽ nhận được null được trả về. Vì vậy, những gì tôi đã làm là, tôi đã thực hiện một phép tính nhỏ để tìm ra vị trí xem chính xác mà tôi đã đề cập bên dưới,

int LastPos=(mylist.getLastVisiblePosition()-mylist.getFirstVisiblePosition()); 

Điều này trả lại vị trí cuối cùng chính xác mà không nghi ngờ gì.

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