Tôi có một vấn đề bán phức tạp và hy vọng rằng ai đó ở đây sẽ có thể giúp tôi.Android: thông báoDataSetChanged() không cập nhật listview sau khi thay đổi hướng
Trên sự kiện nhấp, tôi tạo một chuỗi và bắt đầu một hoạt động lâu dài dựa trên phương pháp this. Sau khi nhiệm vụ kéo dài được hoàn thành, nó hoạt động gọi lại phương pháp khác, mà hiện một đường bưu điện đến xử lý:
@Override
public void contentSearchModelChanged(Model_ContentSearch csm, ArrayList<Class_Reminder> newRemindersList) {
remindersList = newRemindersList;
mHandler.post(mUpdateDisplayRunnable);
}
nào gọi một Runnable:
// post this to the Handler when the background thread completes
private final Runnable mUpdateDisplayRunnable = new Runnable() {
public void run() {
updateDisplay();
}
};
Cuối cùng, đây là những gì tôi Phương thức updateDisplay() đang thực hiện:
private void updateDisplay() {
if (csModel.getState() != Model_ContentSearch.State.RUNNING) {
if(remindersList != null && remindersList.size() > 0){
r_adapter = new ReminderAdapater(Activity_ContentSearch.this, remindersList, thisListView);
thisListView.setAdapter(r_adapter);
r_adapter.notifyDataSetChanged();
}
}
}
Điều này làm việc tốt khi tôi làm điều này bình thường. Tuy nhiên, nếu tôi thay đổi hướng trong khi hoạt động dài hạn đang chạy, nó sẽ không hoạt động. Nó làm cho gọi lại đúng cách, và các remindersList không có các mục trong đó. Nhưng khi đến dòng này:
r_adapter.notifyDataSetChanged();
Không có gì xảy ra. Điều kỳ lạ là, nếu tôi gửi một lần nữa và để nó chạy toàn bộ quá trình một lần nữa (không thay đổi hướng), nó thực sự cập nhật lượt xem hai lần, một lần cho lần gửi trước đó và lần nữa cho lần tiếp theo. Vì vậy, lượt xem cập nhật một lần với kết quả của lần gửi đầu tiên, sau đó lại với kết quả của lần gửi thứ hai sau một giây. Vì vậy, các adapater DID có được dữ liệu, nó chỉ là không làm mới xem.
Tôi biết điều này có liên quan đến sự thay đổi định hướng, nhưng tôi không thể cho cuộc sống của tôi tìm ra lý do. Có ai giúp được không? Hoặc, bất cứ ai có thể đề xuất một phương pháp thay thế xử lý các chủ đề với những thay đổi định hướng?
Bara
Hmm ... có vẻ rất hữu ích, nhưng dường như không có nhiều tài liệu? Tôi ghét phải thay đổi việc triển khai của mình để sử dụng DroidFu và không biết cách giải quyết vấn đề vì đó không phải là cách làm "điển hình". – Bara
Vâng, nó có vẻ là một thư viện bị bỏ hoang cũ nhưng tiền đề dường như là âm thanh. Bạn có thể làm điều này mà không cần sử dụng thư viện. Về cơ bản đối tượng Application theo dõi hoạt động đang hoạt động (sử dụng onResume). Sau đó, khi bạn đã sẵn sàng thông báo cho bộ điều hợp của mình, bạn sẽ nhận được Hoạt động hoạt động từ Ứng dụng, kiểm tra xem đó có phải là một hoạt động dự kiến của bạn hay không và nếu có, truyền và thông báo. –
Mã chính xác để theo dõi "Hoạt động hoạt động" là gì? Đó là, tôi nên làm một cái gì đó như CurrentActivity act = new CurrentActivity(); sau đó chuyển hành động đến lớp Ứng dụng? – Bara