Ich habe gerade festgestellt, dass die Methode in der Android-Dokumentation ( Referenzeintrag ) addPreferencesFromResource(int preferencesResId)
als veraltet markiert ist .
Leider ist in der Beschreibung der Methode keine alternative Methode angegeben.
Welche Methode sollte stattdessen verwendet werden, um eine PreferenceScreen.xml mit der passenden PreferenceActivity zu verbinden?
addPreferencesFromResource(int preferencesResId)
. Vermisse ich etwasAntworten:
In der Beschreibung der Methode wird keine alternative Methode angegeben, da der bevorzugte Ansatz (ab API-Ebene 11) darin besteht, PreferenceFragment- Objekte zu instanziieren , um Ihre Einstellungen aus einer Ressourcendatei zu laden. Den Beispielcode finden Sie hier: PreferenceActivity
quelle
Um der richtigen Antwort oben weitere Informationen hinzuzufügen, haben Sie nach dem Lesen eines Beispiels von Android-er festgestellt, dass Sie Ihre Präferenzaktivität einfach in ein Präferenzfragment konvertieren können. Wenn Sie die folgende Aktivität haben:
Die einzigen Änderungen, die Sie vornehmen müssen, sind das Erstellen einer internen Fragmentklasse, das Verschieben der
addPreferencesFromResources()
in das Fragment und das Aufrufen des Fragments aus der Aktivität wie folgt :Es kann andere Feinheiten geben, komplexere Präferenzen aus Fragmenten zu ziehen. wenn ja, hoffe ich, dass jemand sie hier notiert.
quelle
addPreferencesFromResources()
im Handel für PreferenceFragment abwerten ? Aus Anfängersicht sieht es unnötig aus.@ Garret Wilson Vielen Dank! Als Neuling in der Android-Codierung habe ich mich so viele Stunden lang mit dem Problem der Inkompatibilität von Einstellungen beschäftigt, und ich finde es so enttäuschend, dass die Verwendung einiger Methoden / Ansätze für neue Methoden, die von den älteren APIs nicht unterstützt werden, abgelehnt wurde Sie müssen auf alle möglichen Problemumgehungen zurückgreifen, damit Ihre App auf einer Vielzahl von Geräten funktioniert. Es ist wirklich frustrierend!
Ihre Klasse ist großartig, denn Sie können weiterhin in neuen APIs mit Einstellungen arbeiten, wie sie früher waren, aber sie ist nicht abwärtskompatibel. Da ich versuche, eine breite Palette von Geräten zu erreichen, habe ich ein wenig daran herumgebastelt, damit es sowohl auf Geräten vor API 11 als auch in neueren APIs funktioniert:
Mit Erfolg in zwei Emulatoren (2.2 und 4.2) getestet.
Warum mein Code so beschissen aussieht:
Ich bin ein Neuling in der Android-Codierung und ich bin nicht der größte Java-Fan.
Um die veraltete Warnung zu vermeiden und Eclipse zum Kompilieren zu zwingen, musste ich auf Anmerkungen zurückgreifen, die jedoch nur Klassen oder Methoden betreffen. Daher musste ich den Code auf zwei neue Methoden verschieben, um dies zu nutzen.
Ich möchte meine XML-Ressourcen-ID nicht zweimal schreiben müssen, wenn ich die Klasse für eine neue PreferenceActivity kopiere und einfüge. Daher habe ich eine neue Variable zum Speichern dieses Werts erstellt.
Ich hoffe, dass dies jemand anderem nützlich sein wird.
PS: Entschuldigen Sie meine Meinung, aber wenn Sie neu kommen und solche Nachteile finden, können Sie nicht anders, als frustriert zu werden!
quelle
Mein Ansatz ist Garret Wilsons sehr nahe (danke, ich habe dich gewählt;)
Darüber hinaus bietet es Abwärtskompatibilität mit Android <3.
Ich habe gerade erkannt, dass meine Lösung der von Kevin Remo noch näher kommt . Es ist nur ein bisschen sauberer (da es nicht auf dem Antipattern "Erwartung" beruht ).
Ein "reales" (aber komplexeres) Beispiel finden Sie unter NusicPreferencesActivity und NusicPreferencesFragment .
quelle
@SuppressLint("NewApi")
- vermeiden - genauer sein. Hast du es für niedrige Apis laufen lassen? Es wird werfenVerifyError
@SuppressLint("NewApi")
ist nur ein schlechter Stil@SuppressLint("NewApi")
in dieser besonderen Situation vermeiden kann?@TargetApi(Build.VERSION_CODES.HONEYCOMB)
- Nicht alle Warnungen für eine API :)Verwenden Sie anstelle von Ausnahmen einfach:
und verwenden
die Warnungen zu unterdrücken.
quelle
Anstatt a
PreferenceActivity
zum direkten Laden von Einstellungen zu verwenden, verwenden Sie einAppCompatActivity
oder ein Äquivalent,PreferenceFragmentCompat
das a lädt und Ihre Einstellungen lädt. Es ist Teil der Support-Bibliothek (jetzt Android Jetpack) und bietet Kompatibilität zurück zu API 14.Fügen Sie in Ihrem
build.gradle
eine Abhängigkeit für die Bibliothek zur Unterstützung von Einstellungen hinzu:Hinweis: Wir gehen davon aus, dass Sie Ihre XML-Einstellungen bereits erstellt haben.
Erstellen Sie für Ihre Aktivität eine neue Aktivitätsklasse. Wenn Sie Materialthemen verwenden, sollten Sie ein erweitern
AppCompatActivity
, aber Sie können damit flexibel sein:Nun zum wichtigen Teil: Erstellen Sie ein Fragment, das Ihre Einstellungen aus XML lädt:
Weitere Informationen finden Sie in den Android Developers- Dokumenten für
PreferenceFragmentCompat
.quelle