Những gì tôi muốn làm : chạy một luồng nền để tính toán nội dung ListView và cập nhật ListView một phần, trong khi kết quả được tính toán.
Những gì tôi biết tôi phải tránh : Tôi không thể gây rối với nội dung ListAd CHƯƠNG từ luồng nền, vì vậy tôi đã kế thừa AsyncTask và xuất bản kết quả (thêm mục vào bộ điều hợp) từ onProTHERUpdate. Bộ điều hợp của tôi sử dụng ArrayList của các đối tượng kết quả, tất cả các hoạt động trên các danh sách mảng đó được đồng bộ hóa.
Nghiên cứu của người khác : có dữ liệu rất có giá trị ở đây . Tôi cũng bị sự cố gần như hàng ngày đối với nhóm ~ 500 người dùng và khi tôi thêm list.setVisibility(GONE)/trackList.setVisibility(VISIBLE)
khối vào onProTHERUpdate, các sự cố bị hạ thấp bởi hệ số 10 nhưng không biến mất. (nó đã được đề xuất trong câu trả lời )
Những gì tôi nhận được đôi khi : xin lưu ý, nó thực sự hiếm khi xảy ra (một lần một tuần cho một trong số 3,5k người dùng). Nhưng tôi muốn loại bỏ hoàn toàn lỗi này. Đây là stacktrace một phần:
`java.lang.IllegalStateException:` The content of the adapter has changed but ListView did not receive a notification. Make sure the content of your adapter is not modified from a background thread, but only from the UI thread. [in ListView(2131296334, class android.widget.ListView) with Adapter(class com.transportoid.Tracks.TrackListAdapter)]
at android.widget.ListView.layoutChildren(ListView.java:1432)
at android.widget.AbsListView.onTouchEvent(AbsListView.java:2062)
at android.widget.ListView.onTouchEvent(ListView.java:3234)
at android.view.View.dispatchTouchEvent(View.java:3709)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:852)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:884)
[...]
Cứu giúp? Không cần thiết nữa, xem bên dưới
TRẢ LỜI CUỐI CÙNG: Khi nó bật ra, tôi đã gọi notifyDataSetChanged
mỗi 5 lần chèn để tránh nhấp nháy và thay đổi danh sách đột ngột. Nó không thể được thực hiện theo cách đó, luôn thông báo cho bộ điều hợp khi danh sách cơ sở thay đổi. Lỗi này nó đã mất từ lâu đối với tôi bây giờ.