Wie implementiert man onRestoreInstanceState () für eine DialogPreference-Unterklasse?

8

Ich implementiere meine eigene benutzerdefinierte DialogPreference-Unterklasse mit einer SeekBar, die für die Persistenz einer Ganzzahl verwendet wird. Ich bin ein wenig verwirrt darüber, was in onSaveInstanceState() und onRestoreInstanceState() gehen muss. Müssen Sie das UI-Widget, mit dem der Benutzer interagiert (in meinem Fall das SeekBar-Widget), in onRestoreInstanceState() ?

aktualisieren?

Der Grund, warum ich verwirrt bin, ist, dass der API-Dokument-Artikel hier Sie dazu auffordert tu dies:

%Vor%

Aber schauen Sie sich die Quelle für einige offizielle Android Preference-Klassen an ( EditTextPreference und ListPreference ), das UI-Widget ist nicht in onRestoreInstanceState() aktualisiert. Nur der zugrunde liegende Wert der Präferenz ist (im obigen Beispiel wäre das mNewValue ).

Hier ist die relevante Quelle für EditTextPreference:

%Vor%

Also, was ist der Konsens? Wo soll ich das UI-Widget aktualisieren (wenn ich es überhaupt aktualisieren soll ...)?

    
XåpplI'-I0llwlg'I - 06.01.2013, 11:56
quelle

1 Antwort

4

Okay, nach einigen Experimenten sieht es so aus, als ob das UI-Widget in onRestoreInstanceState() nicht aktualisiert wird, da es immer an diesem Punkt null zu sein scheint. Ich weiß nicht, warum sie es vorschlagen. Vielleicht müssen Sie dies tun, wenn Sie Preference ableiten, aber es gibt verschiedene Regeln, die Sie befolgen müssen, wenn Sie DialogPreference ... erstellen? Das würde zumindest erklären, warum ListPreference und EditTextPreference das nicht tun, weil sie die DialogPreference ableiten.

Nach allem, was ich gefunden habe, muss das UI-Widget überhaupt nicht aktualisiert werden! Es sollte eigene Speicher- / Wiederherstellungsmethoden haben, die die Statusverwaltung für Sie übernehmen. Hier ist beispielsweise ein Auszug einer DialogPreference-Unterklasse, die ich mit einem SeekBar-Widget erstellt habe:

%Vor%

Wie Sie sehen, aktualisiere ich ein SeekBar-Widget niemals irgendwo. Die SeekBar speichert / stellt ihren Zustand selbst wieder her!

Sie werden auch bemerken, dass es geringfügige Abweichungen von den Vorschlägen in den Android-Entwicklerdokumenten gibt. Ich überprüfe nicht, ob die DialogPreference vor dem Speichern des Status persistent ist, weil dann die Eigenschaften mValue und mMaxValue nicht gespeichert werden, wenn dies der Fall ist. Ich rufe auch super.onRestoreInstanceState() direkt am Ende auf, da ich festgestellt habe, dass es nie funktioniert, wenn es früher aufgerufen wird.

Das sind nur meine bisherigen Ergebnisse. Ich bin mir nicht sicher, was der richtige Weg ist, aber was ich oben habe scheint zu funktionieren.

UPDATE: @whatyouhide möchte wissen, wie die Methoden setValue und setMaxValue in meiner DialogPreference-Unterklasse aussehen. Hier sind sie:

%Vor%     
XåpplI'-I0llwlg'I - 14.01.2013, 11:03
quelle