ich eine benutzerdefinierte Ansicht haben, lassen Sie uns sagen, dass dies seinen Code ist:XML Zustand der Ansicht Wiederherstellung vor der Anwendung Attribute
public class CustomView extends View {
boolean visible;
boolean enabled;
public ScheduleView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
TypedArray a = context.getTheme().obtainStyledAttributes(attrs, R.styleable.CustomView, 0, 0);
try {
visible = a.getBoolean(R.styleable.CustomView_visible, true);
enabled = a.getBoolean(R.styleable.CustomView_enabled, true);
} finally {
a.recycle();
}
// Apply XML attributes here
}
@Override
public Parcelable onSaveInstanceState() {
// Save instance state
Bundle bundle = new Bundle();
bundle.putParcelable("superState", super.onSaveInstanceState());
bundle.putBoolean("visible", visible);
bundle.putBoolean("enabled", enabled);
return bundle;
}
@Override
public void onRestoreInstanceState(Parcelable state) {
// Restore instance state
// This is called after constructor
if (state instanceof Bundle) {
Bundle bundle = (Bundle) state;
visible = bundle.getBoolean("visible");
enabled = bundle.getBoolean("enabled");
state = bundle.getParcelable("superState");
}
super.onRestoreInstanceState(state);
}
}
ziemlich einfach. Meine benutzerdefinierte Ansicht liest Attribute aus XML und wendet sie an. Diese Attribute werden bei Konfigurationsänderungen gespeichert und wiederhergestellt.
Aber wenn ich zwei verschiedene Layouts, zum Beispiel für zwei unterschiedliche Ausrichtungen:
[layout-port/view.xml]
<CustomView
custom:visible="true"
custom:enabled="true"
[layout-land/view.xml]
<CustomView
custom:visible="false"
custom:enabled="false"
Mein Problem ist, dass, wenn die Geräteausrichtung zu ändern, Ansichtszustand als sichtbar gespeichert und aktiviert ist, aber jetzt XML-Layout-Staaten die Ansicht sollte auch nicht haben. Der Konstruktor wird vor onRestoreInstanceState aufgerufen und die XML-Attribute werden vom gespeicherten Status überschrieben. Ich will das nicht, XML hat Vorrang vor dem gespeicherten Zustand.
Ich mache etwas falsch? Was wäre der beste Weg, dies zu lösen?
speichern die XML-Werte in anderen Variablen und erneut anwenden, sie nach der Restaurierung. Sie können auch keine Wiederherstellung anwenden, also sind die Werte immer die in xml definierten – nandsito
@nandsito Dies ist wahrscheinlich, was ich am Ende tun. Ich dachte nur, dass es vielleicht einen direkteren Weg gibt, dies zu tun, eine Möglichkeit, den Zustand nach dem Parsen von XML wiederherzustellen. Was ich dachte, könnte ich tun, um das AttributeSet in eine Variable zu speichern und am Ende von onRestoreInstanteState XML zu analysieren. Aber onRestoreInstanteState wird nicht aufgerufen, wenn die Ansicht zuerst erstellt wird. –
Android analysiert das XML und wendet seine Attribute im Ansichtskonstruktor an, sodass das XML immer vor dem Wiederherstellungsstatus verarbeitet wird. Wenn Sie diese Reihenfolge ändern möchten, müssen Sie die Variablenwerte – nandsito