Android: notifyDataSetChanged() pas de mise à jour listview après changement d'orientation

J'ai un semi-problème compliqué et en espérant que quelqu'un ici pourra m'aider.

Sur un événement click-je créer un thread et de commencer une opération de longue durée basée sur cette méthode. Après la longue tâche est terminée, il fait un rappel à une autre méthode, qui fait un courrier au gestionnaire:

@Override
public void contentSearchModelChanged(Model_ContentSearch csm, ArrayList<Class_Reminder> newRemindersList) {
    remindersList = newRemindersList;
    mHandler.post(mUpdateDisplayRunnable);
}

Qui appelle un Exécutable:

//post this to the Handler when the background thread completes
private final Runnable mUpdateDisplayRunnable = new Runnable() {
  public void run() {
    updateDisplay();
  }
};

Enfin, voici ce que ma updateDisplay() la méthode est en train de faire:

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();
        }
    }
}

Cela fonctionne à merveille lorsque je le fais normalement. Cependant, si je change l'orientation tout au long de l'opération est en cours d'exécution, il ne fonctionne pas. Elle permet de faire le rappel correctement, et le remindersList n'ont des éléments. Mais quand il arrive à cette ligne:

r_adapter.notifyDataSetChanged();

Rien ne se passe. La chose étrange est, si je fais un autre de soumettre et d'exécuter l'ensemble du processus de nouveau (sans changer l'orientation), il fait les mises à jour de la vue à deux reprises, une fois pour la précédente et soumettre à nouveau pour la prochaine. Donc, la vue est mis à jour avec les résultats de la première soumettre, puis de nouveau avec les résultats de la deuxième soumettre une seconde plus tard. Si l'adapater N'avez pas les données, il n'est tout simplement pas l'actualisation de la vue.

Je sais que cela a quelque chose à voir avec le changement d'orientation, mais je ne peux pas pour la vie de me comprendre pourquoi. Quelqu'un peut-il aider? Ou, quelqu'un peut-il suggérer une autre méthode de gestion des threads avec des changements d'orientation de l'?

Bara

InformationsquelleAutor Bara | 2010-06-21