Ich schreibe ein Programm, wo ich mehrere Layouts auf der gleichen Aktivität aufrufen, aber dann bemerkte ich, dass wenn ich Layouts wechseln, die vor dem Wechsel vorgenommenen Änderungen nicht wiederhergestellt werden und onSavedInstanceState(Bundle outState)
nicht aufgerufen wird. Ich habe versucht, die Methode manuell aufzurufen, aber ich kann das Bundle outState
nicht abrufen.So rufen Sie onSaveInstanceState() manuell
Die Frage ist also wirklich: Wie bekomme und speichere ich den aktuellen Status einer Aktivität, die zu einem Zeitpunkt meiner Wahl abgerufen und/oder wiederhergestellt werden soll?
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_contact_view);
// more code
}
@Override
public void onBackPressed() {
if (layoutId == R.layout.activity_contact_view) exit();
else if (layoutId == R.layout.main) {
Toast.makeText(NsdChatActivity.this, "Successful back button action", Toast.LENGTH_SHORT).show();
setContentView(R.layout.activity_contact_view);
refreshContactList();
}
}
Und dann von einer separaten Klasse
public void updateList(final int found) {
LinearLayout layxout = (LinearLayout) ((Activity)mContext).getWindow().getDecorView().findViewById(R.id.others);
TextView t = new TextView(mContext);
t.setClickable(true);
t.setText(found + ". " + activity.sNames.get(found));
t.setLayoutParams(new ViewGroup.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT));
t.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//show chat view
activity.setContentView(R.layout.main);
TextView name = (TextView)activity.findViewById(R.id.clientName);
name.setText(activity.sNames.get(found).split(" \\(")[0]);
final ScrollView scroll = (ScrollView)activity.findViewById(R.id.scroll);
scroll.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View view, boolean b) {
scroll.fullScroll(View.FOCUS_DOWN);
}
});
}
});
layxout.addView(t);
}
Führt das Wechseln des Layouts dazu, dass die Aktivität implizit neu erstellt wird? Wenn nicht, wird 'onSavedInstanceState (Bundle outState)' nicht aufgerufen. – Enzokie
Verzeih mir, aber kannst du erklären, was du meinst, wenn du "implizit neu erschaffen" sagst? Ich benutze 'setContentView()', um zwischen den Layouts zu wechseln. – kbluue
Ein gutes Beispiel wird sein: wenn Sie das Gerät drehen, wird die Aktivität zerstört und neu erstellt, so dass es sich um eine implizite Aktivitätserholung handelt, da Sie nie sagen, dass die Aktivität neu erstellt werden soll. – Enzokie