Update-fragment im fragment-option Auswahl
Ich habe fragment, das auf eine Komponente, klicken Sie auf pop-ups DialogFragment. Diese dialog-fragment enthält Liste der Optionen. Wenn Sie eine option aus der Liste ausgewählt ist, will ich informieren-fragment, so kann ich ausführen Felder aktualisieren Verfahren.
Ich hab sowas schon
@Override
public void onClick(DialogInterface dialog, int item) {
updateSharedPreference(item);
Log.e("ProfilePersonaListDialog", "Click on dialog, inside onClick");
OnCloseListDialogListener act = (OnCloseListDialogListener) getActivity();
act.onDialogListSelection();
dismiss();
}
Jedoch diese getActivity () - Aufrufe auf FragmentActivity und nicht das fragment, das der Auslöser für den dialog-fragment.
Ich könnte töten, momentan geöffnet/ausgeführt fragment und ruft eine neue Instanz, die aktualisiert würde Feldern, aber das ist dirty Lösung, die ich bevorzugen würde, zu vermeiden.
Irgendwelche Vorschläge, wie man über dieses update von fragment einmal-option im Dialogfenster fragment?.
- Mit FragmentManager Sie können das gleiche zu erreichen
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nur auf dem Rückweg mit der Lösung. Mein problem war eigentlich die Weiterleitung aktuelle fragment getTag() string als parameter der show() für DialogFragment. Wenn jemand hier interessiert ist Beispiel arbeiten.
Erstellen von einfachen listener
Erstellen neuer dialog, erweitern DialogFragment
Und dann im fragment, von dem Sie wollen, rufen Sie dieses Dialogfeld tun, als Gebrüll. DIALOG ist nur String-Konstante, die ich dort nur dialog
Ist es notwendig, in den meisten Fällen, dass ein
Fragment
sich bewusst sein, dass es ausgeführt wird, im Kontext einerActivity
einiger Beschreibung und akzeptabel für das Kind-Fragment, um eine Methode aufzurufen, die auf einem interface implizit umgesetzt, die von der übergeordneten Aktivität (wie gezeigt, durch die Besetzung in deinem code-snippet). Wenn Sie Ihre Referenzen arbeiten, wie Tomasz Punkte aus werden Sie golden.Jedoch 🙂 für die Hilfe der re-usability der dialog-fragment-ich würde vorschlagen, dass Sie nutzen
BroadcastReceiver
s. Ein BroadcastReceiver einfach überträgt eine Meldung ich habe 'x'. Die übergeordnete Aktivität oder in der Tat jede andere top-level-Komponente kann dann erklären ich höre für 'x'. Sobald das Ereignis ausgelöst wurde in der dialog-Komponente, die dieses Ereignis gesammelt werden, die von der übergeordneten AktivitätonReceive
wo Sie ausführen können, um den notwendigen code aktualisieren Sie Ihre Felder.Auf einer persönlichen Ebene, ich bevorzuge diese lose Kopplung über das casting interface-Ansatz, da es mich zwingt zu denken über den Zweck von jedem Fragment und bewahren Sie es modular.
Wenn Sie wollen, give it a shot, dann Lesen Sie über den dev-guide-Sektion auf BroadcastReceivers und befolgen Sie die Folgen Schritte;
Umsetzung der
BroadcastReceiver
in Ihrem übergeordneten Aktivität. Ankündigung eineronReceive
- Methode erforderlich ist, umgesetzt werden.Überschreiben der übergeordneten Aktivität
onResume
Methode und registrieren Sie die Aktivität, die als Empfänger eines Ereignisses mit der Absicht, die Aktion "bla". So etwas wie;Überschreiben der übergeordneten Aktivität
onPause
Methode eine Registrierung der Aktivität, da der Empfänger so vermeiden Sie "durchgesickert Empfänger" (Sie finden sich).In Ihrem
DialogFragment
onClick
Feuer das Ereignis, das Ihr übergeordnete Tätigkeit 'hören' für.Wird die übergeordnete Aktivität sammeln die Nachricht und können Sie weiter verarbeiten. Lassen Sie mich wissen, wenn Sie sich entscheiden, zu verabschieden, dass Methode.
Nur die Art, wie du es getan hast oben und add sth mag, die Sie in Ihre Tätigkeit :
Natürlich, wenn Sie sind nicht verwenden-Support-Bibliothek rufen Sie dann
getFragmentManager
stattgetSupportFragmentManager
.DialogTransaction.add(int containerViewId, Fragment fragment, String tag)
stattDialogTransaction.add(int containerViewId, Fragment fragment)
(DailogFragment istshow
scheint nur die version mit tag-argument:DailogFragments.show(FragmentTransaction transaction, String tag)
)ProfilePersonaListDialog.newInstance(personaData, tag).show(getSupportFragmentManager().beginTransaction(), tag);
Dies ist, wo Sie speichern können, das fragment zurückgegeben newInstance factory-Methode als activitie Mitglied-Feld, aber auf der Seite sind Sie im Besitz von tag zu identifizieren, die dieses fragment ist also vielleicht nicht benötigt