У меня есть полусложная проблема, и я надеюсь, что кто-то здесь сможет мне помочь.
В случае щелчка я создаю поток и запускаю длительную операцию, основанную на this метод.После завершения долгосрочной задачи она выполняет обратный вызов другого метода, который отправляет сообщение обработчику:
@Override
public void contentSearchModelChanged(Model_ContentSearch csm, ArrayList<Class_Reminder> newRemindersList) {
remindersList = newRemindersList;
mHandler.post(mUpdateDisplayRunnable);
}
, который вызывает Runnable:
// post this to the Handler when the background thread completes
private final Runnable mUpdateDisplayRunnable = new Runnable() {
public void run() {
updateDisplay();
}
};
Наконец,Вот что делает мой метод updateDisplay ():
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();
}
}
}
Это прекрасно работает, когда я делаю это нормально.Однако, если я изменю ориентацию во время выполнения длительной операции, она не будет работать.Он действительно выполняет обратный вызов, и в нем есть элементы.Но когда доходит до этой строки:
r_adapter.notifyDataSetChanged();
Ничего не происходит.Странно то, что если я выполняю еще одну отправку и снова запускаю весь процесс (без изменения ориентации), он фактически обновляет представление дважды, один раз для предыдущей отправки и снова для следующей.Таким образом, представление обновляется один раз с результатами первой отправки, затем снова с результатами второй отправки через секунду.Таким образом, адаптер получил данные, он просто не обновляет представление.
Я знаю, что это как-то связано с изменением ориентации, но я не могу понять, почему.Кто-нибудь может помочь?Или кто-нибудь может предложить альтернативный метод обработки потоков с изменением ориентации?
Бара