2016-04-08 3 views
-1

Ich versuche, meine HashMap-Werte zu behalten, wenn ich zu einer anderen Aktivität navigieren und zurückkehren. Dies ist der Code, den ich für jetzt habe.Android HashMap nicht beibehalten, wenn Sie zur Aktivität zurückkehren

Die HashMap funktioniert und ist in der Lage, die Daten aus dem EditText in der Ansicht zu erfassen und zu speichern.

Doch sobald ich aus der Tätigkeit und Rückkehr verlassen, wird die HashMap neu initialisiert leeren -> {}

Ich habe in der Dokumentation sah, und es scheint dies der richtige Weg ist, dass eine variable Daten sicherzustellen, ist beharrte. Es funktioniert jedoch nicht.

lass es mich wissen, was das Problem sein könnte:

public class ScriptActivity extends MainActivity { 

    HashMap timeAndMessages; 
    EditText message; 
    EditText time; 



    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_script); 

     if (savedInstanceState != null) { 
      timeAndMessages = (HashMap) savedInstanceState.getSerializable("alerts"); 
     } else { 
      timeAndMessages = new HashMap(); 
     } 

     message = (EditText)findViewById(R.id.messageText); 
     time = (EditText)findViewById(R.id.timeText); 
    } 

    @Override 
    protected void onRestoreInstanceState(Bundle savedInstanceState) { 
     super.onRestoreInstanceState(savedInstanceState); 

     restore(savedInstanceState); 
    } 

    private void restore(Bundle savedInstanceState) { 
     if (savedInstanceState != null) { 
      timeAndMessages = (HashMap) savedInstanceState.getSerializable("alerts"); 

     } 
    } 

    public void createMessage (View view){ 

     String stringmessage = message.getText().toString(); 
     int inttime = Integer.parseInt(time.getText().toString()); 

     timeAndMessages.put(inttime, stringmessage); 

     Toast.makeText(getApplicationContext(), "Will display : " + stringmessage + " At time : " + Integer.toString(inttime) , Toast.LENGTH_LONG).show(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) { 
     super.onSaveInstanceState(outState, outPersistentState); 
     outState.putSerializable("alerts", timeAndMessages); 
    } 
} 
+0

Zuerst können wir Ihre 'restore()' Methode nicht sehen. Zweitens wird Ihre 'onSaveInstanceState()' Methode nur auf API Level 21+ Geräten verwendet. Sie möchten wahrscheinlich die 'onSaveInstanceState()' Version, die nur das 'Bundle' nimmt, wenn Ihre' minSdkVersion' unter 21 liegt. Drittens, diese Instanzzustände sind nicht für beliebige Szenarien, sondern nur für bestimmte (z. B. Konfigurationsänderung). Bitte editiere deine Frage und erkläre, was "ein- und ausgehen" bedeutet. – CommonsWare

+0

Können Sie die "timeAndMessages" -Deklaration und den Initialisierungscode posten? Und wenn es sich um eine Sammlung von benutzerdefinierten Objekten handelt, poste bitte auch dieses POJO. –

+0

@CommonsWare Ich habe API-Ebene 23. Das Hinzufügen/Entfernen von outPersistentState scheint den Code nicht zu beeinflussen –

Antwort

0

Doch sobald ich aus der Tätigkeit und Rückkehr verlassen, wird die HashMap neu initialisiert leeren -> {}

Wenn Sie "von der Aktivität weggehen und zurückkehren", meinen Sie, drücken Sie die Schaltfläche ZURÜCK, dann tun Sie etwas, um eine neue Aktivität zu starten ... dann wird Ihr Verhalten erwartet.

Die Bundle für die gespeicherte Instanz Zustand in zwei Hauptszenarien verwendet:

  • Konfigurationsänderungen (zB dreht Benutzer den Bildschirm)
  • Prozess Beendigung und der Benutzer kehrt zu Ihren letzten Aufgabe (zB , über den Übersichtsbildschirm)

Drücken Sie ZURÜCK, um die Aktivität zu löschen. Daher wird der Zustand nicht gespeichert.

Wenn diese HashMap Modelldaten darstellt — die Art von Daten, die Sie erwarten, zurück zu sein, Zeit in der Lage sein zu bekommen und wieder, egal, wie der Benutzer verwendet Ihre App — speichert sie in eine Datenbank, SharedPreferences, andere Art von Datei oder "die Wolke".

Sie können mehr über diese Szenarien in the Activity documentation lesen.

Verwandte Themen