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);
}
}
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
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. –
@CommonsWare Ich habe API-Ebene 23. Das Hinzufügen/Entfernen von outPersistentState scheint den Code nicht zu beeinflussen –