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
Ich habe mich gefragt, ob es einen einfacheren Weg dafür gibt.
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
:
Hier sind die PreferenceActivity
und PreferenceFragment
, die ich verwendet habe:
PreferenceFragmentCompat
: Zuerst brauchen wir noch ein xml: xml\subpreference.xml
(Duplikat des Untermenüs von% preference.xml
):
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):
In diesem Fall können Sie einfach normal onBackPressed()
of Activity
Ich hoffe, es hilft
Tags und Links android preferences preferenceactivity preferencefragment