So erkennen Sie, wenn ein innerer PreferenceScreen geschlossen wurde

9

Ich habe einen inneren PreferenceScreen (nenne ihn Users ) in einem anderen PreferenceScreen (nenne ihn Main ).
Wenn ich auf Users tippe, öffnet sich ein neuer Bildschirm und ich kann dort meine Einstellungen ändern (viele CheckBoxen).
Ich möchte erkennen (einen Rückruf auslösen), wenn dieser Bildschirm ausgeblendet wird und wenn ich wieder auf dem Main PreferenceScreen bin.
Der einzige Weg, den ich gefunden habe, ist eine neue Klasse zu erstellen, die PreferenceScreen erbt und onPrepareForRemoval

überlädt

Ich habe mich gefragt, ob es einen einfacheren Weg dafür gibt.

    
Jesno 06.01.2014, 15:25
quelle

1 Antwort

4

Sehr interessante Frage! Ich habe es endlich herausgefunden.

Der Trick besteht darin, DialogInterface.OnCancelListener für das Untermenü PreferenceScreen ( Users , in unserem Fall) zu setzen, und Sie können dies in onPreferenceTreeClick tun (da hier intern Dialog bereits initialisiert ist). Also void onCancel(DialogInterface dialog) ist der Rückruf, nach dem Sie gesucht haben.

Hier ist die xml\preferences.xml :

%Vor%

Hier sind die PreferenceActivity und PreferenceFragment , die ich verwendet habe:

%Vor%

UPD: Lösung für PreferenceFragmentCompat :

Zuerst brauchen wir noch ein xml: xml\subpreference.xml (Duplikat des Untermenüs von% preference.xml ):

%Vor%

Dann sollte unsere Hosting-Aktivität implements PreferenceFragmentCompat.OnPreferenceStartScreenCallback sein. Und letzter Schritt - wir brauchen ein neues Subfragment (oder übergeben Sie exaktes XML, das Sie als Parameter eines Pakets aufblasen müssen):

%Vor%

In diesem Fall können Sie einfach normal onBackPressed() of Activity

anhören

Ich hoffe, es hilft

    
Konstantin Loginov 22.12.2015 21:43
quelle