Dialog Fragment in Android

Wenn man Dialoge in Android benutzen will muss man sie als Fragment an die Activity anbinden.
Die beste Möglichkeit um zwischen Dialog und Activity oder Fragment (an die Activity angebunden, in dem Beispiel RecordDetailFragment) zu kommunizieren sind Callbacks.

Das interface EditDateDialogListener beschreibt 2 Funktionen:
public void onDialogPositiveClick(DialogFragment dialog);
public void onDialogNegativeClick(DialogFragment dialog);
In der Klasse die den Dialog anhängen möchte implementiert man das Interface EditDateDialogListener (public class RecordDetailFragment extends SherlockFragment implements EditDateDialogFragment.EditDateDialogListener).
Die Callbacks sorgen dafür, dass der gesamte Dialog an die Activity zurückgegeben und dort verwendet werden kann.
Diese werden abhängig vom gedrückten Button an die implementierende Klasse geschickt.
Das größte Problem ist die Verbindung von Dialog und angebundener Activity:
Die Activity wird neu erstellt, wenn das Gerät z.B. gedreht wird. Der Dialog schickt nun seine Daten an die nicht mehr vorhandene Activity.
Daher muss diese Verbindung konsistent gehalten werden. Dafür sorgt die setListener Methode, die aufgerufen werden muss sobald man den Dialog anhängt und bei jedem Drehen des Displays (in der onCreate methode implementiert).

Das Beispiel ist nicht ausreichend erklärt – am besten einbauen und mit dem Debugger durchsteppen.
Es gibt einen guten Guide von Android, der Dialogs erklärt. Speziell habe ich auf die Kommunikation verlinkt. Mein Beispiel unterscheidet sich nicht groß, bis auf das konsistent halten der Callbacks.
Android empfiehlt übrigens solche Abhängigkeiten mit Callbacks zu realisieren.
Außerdem benutzte ich die ActionBarSherlock Library – deshalb die veränderten Activity-Klassen.
Eine falsche Implementierung des Dialogs kann man in der App AdAway sehen. Lädt man die host Einträge herunter erscheint nach Fertigstellung ein Dialog. Dreht man das Gerät verschwindet der Dialog. Offensichtlich besteht keine konsistente Verbindung zwischen Activity und Dialog, die bei uns die setListener übernimmt. Ich kenne den Code nicht und weiß nicht ob Callbacks verwendet wurden, jedoch verhält es sich so, wenn man die Verbindung nicht konsistent hält. Getestet in der AdAway Version 2.0 (39)

If you have found a spelling error, please, notify us by selecting that text and pressing Ctrl+Enter.

  2 comments for “Dialog Fragment in Android

    Leave a Reply

    Your email address will not be published. Required fields are marked *

    This site uses Akismet to reduce spam. Learn how your comment data is processed.

    Spelling error report

    The following text will be sent to our editors: