android: Wie man Einstellungen navigiert wie native Einstellungen App

8

Wie führe ich die Einstellungsnavigation für SwitchReference wie die App für native Android-Einstellungen?

Wenn Sie auf die WiFi-Region klicken (nicht auf dem Switch), wird zu einem neuen Bildschirm navigiert:

Meine App ändert nur den Schalter von EIN auf AUS und umgekehrt, auch wenn ich nicht auf den Schalter klicke.

Ich verwende PreferenceFragment und xml für den Bildschirm. Und meine Präferenz folgt dem Beispiel aus der Android PreferenceFragment-Dokumentation . Ich entwickle meine App auf ICS 4.0 API 14.

Weiß jemand, wie man das macht?

Bearbeitet:

Mein XML sieht so aus:

%Vor%     
Zul 19.04.2012, 12:07
quelle

3 Antworten

5

Wenn Sie sich die Quelle der Stock-Einstellungen-App ansehen, können Sie herausfinden, wie sie es gemacht hat.

Im Grunde genommen verwenden sie einen benutzerdefinierten ArrayAdapter (ähnlich wie bei einem ListView), um Zeilen mit Schalterschaltflächen anzuzeigen. Und für den zweiten Bildschirm verwenden sie einfach die CustomView, die in der ActionBar verfügbar ist.

Ich schrieb einen Artikel mit einem Beispielcode < Zeigen Sie, wie Sie es in Ihrem Projekt tun können. Seien Sie jedoch vorsichtig, dies kann nur in API Level 14 oder höher funktionieren. Wenn Sie also auf ältere Geräte abzielen, behalten Sie einen alten Stil Präferenz-Bildschirm.

    
XGouchet 27.06.2012, 05:40
quelle
1

Ich sehe hier zwei Fragen: 1. Wie höre ich Präferenzklicks außerhalb des Schalterbereichs? 2. Wie setze ich einen Schalter in die Aktionsleiste?

Ich beantworte Frage 1:

Ich habe eine neue Klasse SwitchPreference erstellt und die Methode onClick überschrieben, um nichts zu tun. Dies verhindert, dass sich die Einstellung ändert, wenn außerhalb des Schalters geklickt wird.

%Vor%

Verwendung (xml):

%Vor%

Verwendung (Java):

%Vor%     
AlikElzin-kilaka 30.06.2014 10:04
quelle
1

Ich habe es versucht und ein bisschen gekämpft. Ich dachte, ich würde meine Erfahrung teilen.

Zuerst versuchte ich die Antwort von XGouchet , da sie die meisten Stimmen hatte. Die Lösung war ziemlich kompliziert und erforderte die Verwendung von Einstellungsheadern , die sehr cool sind, aber nicht passten Womit ich beschäftigt war. Ich entschied, dass die einfachste Sache für mich ist, meine preferenceFragment in ein reguläres Fragment zu verpacken und die Switch-Präferenz mit einer normalen Ansicht zu fälschen. Ich habe die Android-Quelle für eine Vorliebe ausgegraben und kam mit diesem

%Vor%

Das FrameLayout oben bekommt ein Präferenzfragment wie folgt

%Vor%

Dann kann ich meine Klickhörer wie in jeder normalen Ansicht zuweisen. SettingsPreferencesFragment ist nur ein Standard-Präferenzfragment.

Diese Lösung schien ziemlich gut zu sein, aber dann bemerkte ich seltsame Layout-Probleme auf Tablets. Ich erkannte, dass ich Schwierigkeiten haben würde, diese Lösung auf allen Geräten richtig aussehen zu lassen, und ich brauchte eine echte switchPreference, keine gefälschte.

============== Lösung 2 ================

Die Lösung von AlikElzin-kilaka war nett und einfach, funktionierte aber nicht, als ich es versuchte. Ich habe ein zweites Mal versucht, um sicherzustellen, dass ich nicht nur falsch gemacht habe. Ich spielte weiter herum und dachte mir etwas aus, das zu funktionieren scheint. Er hat einen guten Punkt über

  

2 Fragen hier: 1. Wie man Präferenzklicke außerhalb des hört   Bereich wechseln? 2. Wie setze ich einen Schalter in die Aktionsleiste?

Wirklich nur Frage (1) ist es wert, beantwortet zu werden, weil Frage 2 hier und andere Orte

Ich erkannte, dass der einzige Weg, um auf die Ansichten in einer Voreinstellung zuzugreifen, darin bestand, eine untergeordnete Klasse zu erstellen und onBind . Daher habe ich diese untergeordnete Klasse von SwitchPreference entwickelt, die separate Click-Handler für den Switch als gesamte Ansicht erstellt. Es ist immer noch ein Hack.

%Vor%

Er verwendet die rekursive Funktion findSwitchWidget, um den Baum zu durchlaufen, bis er einen Schalter findet. Ich hätte lieber Code wie folgt schreiben:

%Vor%

Aber es scheint keinen Weg zu geben, zu diesem internen ID-Wert zu gelangen, den ich kenne. Sobald wir den eigentlichen Schalter haben, können wir ihm und der Containeransicht Listener zuweisen. Die Voreinstellung für den Wechsel wird nicht automatisch aktualisiert, daher ist es notwendig, die Einstellung selbst zu speichern.

%Vor%

Hoffentlich kommt dieser zweite Hack nicht zurück, um mich zu beißen.

Irgendjemand sieht mögliche Fallstricke dieser Methode?

Ich habe auch eine etwas verbesserte Version des Codes auf github Ссылка

gestellt     
Marc 11.01.2015 18:25
quelle

Tags und Links