Ứng dụng có ListView với nhiều lựa chọn được bật, trong giao diện người dùng hoạt động như mong đợi. Nhưng khi tôi đọc các giá trị bằng cách sử dụng mã này:Tại sao ListView.getCheckedItemPositions() không trả lại giá trị chính xác?
Log.i(TAG,"Entered SearchActivity.saveCategoryChoice()");
SparseBooleanArray checkedPositions = categorySelector.getCheckedItemPositions();
Log.i(TAG,"checkedPositions: " + checkedPositions.size());
if (checkedPositions != null) {
int count = categoriesAdapter.getCount();
for (int i=0;i<count;i++) {
Log.i(TAG,"Selected items: " + checkedPositions.get(i));
}
}
tôi nhận được kết quả này, không có vấn đề gì nhà nước mỗi hộp kiểm là:
Entered SearchActivity.saveCategoryChoice()
checkedPositions: 0
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Selected items: false
Các SparseBooleanArray dường như return false cho bất kỳ không tồn tại mục, do đó, nguồn gốc của các vấn đề có vẻ là getCheckedItemPositions() trả về một mảng trống. Phương thức này hoạt động như thể không có mục nào trong ListView, nhưng có.
tôi có thể nhìn thấy từ các tài liệu mà không có giá trị được trả về khi ListView không được thiết lập như nhiều lựa chọn, nhưng nó là, sử dụng câu lệnh:
categorySelector.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
Trong kịch bản của tôi, adapter tôi m sử dụng là một phân lớp của ArrayAdapter, và (không có bất kỳ bằng chứng vững chắc) Tôi nghi ngờ điều này có thể là nguyên nhân, mặc dù tôi không thể nhìn thấy lý do tại sao nó không nên làm việc.
Bạn có thể giải thích cách thêm addClickHandlerToCheckBox cho mỗi hộp kiểm trong danh sách hộp kiểm của mình không? cảm ơn. – rayman
Có thể vấn đề là khung nhìn được trả về từ getView của adapter() đã không thực hiện giao diện Checkable. – Sergey
Tôi gặp vấn đề tương tự, nhưng do sự lựa chọn bị xóa bởi hộp thoại xác nhận. Bạn cần sao chép 'SparseBooleanArray' trước khi xóa các trạng thái đã chọn (tự động). – jtooker