2 Stimmen

Assistent wie DialogFragment-Kette

Hallo liebe Android-Entwickler,

Ich versuche, zwei DialogFragmente in einer Reihe zu haben, so dass, wenn das erste abgebrochen wird, ein zweites auftaucht.

Hier ist, was ich bis jetzt habe:

In meiner Aktivität rufe ich die folgende Methode auf:

void showFirstDialog() {
        // Pass the context to do a callback
        DialogFragment newFragment = ChangeDialogFragment.newInstance(mContext);
        newFragment.show(getSupportFragmentManager(), "myFirstDialogTag");
    }

In meinem DialogFragment habe ich folgenden Code, um zu erkennen, dass es abgebrochen wird:

@Override
    public void onCancel(DialogInterface dialog) {
            // Use Context to do a callback and inform the Activity that
            // Fragment is cancelled
        ((Activity) mContext).firstDialogCanceled();
        super.onCancel(dialog);
    }

Zurück in meiner Aktivität reagiere ich auf dieses Ereignis, indem ich den zweiten Dialog beginne:

void firstDialogCanceled {
        DialogFragment newFragment = InformationDialogFragment.newInstance();
        newFragment.show(getSupportFragmentManager(), "mySecondDialogTag");
    }

Das funktioniert einwandfrei, solange ich beim ersten Dialog keine Orientierungsänderung vornehme. Wenn ich eine habe, erhalte ich den folgenden Fehler:

java.lang.IllegalStateException: Diese Aktion kann nicht ausgeführt werden, nachdem onSaveInstanceState

Diese Ausnahme wird in der Zeile "newFragment.show(getSupportFragmentManager(), "mySecondDialogTag");" ausgelöst.

Ich dachte, ich könnte dieses Problem lösen, indem ich den ersten Dialog von Hand entlasse. Ich habe folgendes versucht:

DialogFragment firstFragment = (DialogFragment) getSupportManager().findFragmentByTag("myFirstDialogTag");
firstFragment.dismiss();

Auch hier funktioniert alles einwandfrei, ohne dass die Ausrichtung geändert werden muss. Wenn ich eine Orientierungsänderung habe, während der erste Dialog auf dem Bildschirm ist, erhalte ich eine NullPointerException in der Zeile "firstFragment.dismiss()".

Warum ist das so? Warum vergisst der FragmentManager mein DialogFragment nach einer Ausrichtungsänderung und warum kann ich nicht einfach das zweite anzeigen. Androidreferences sagen:

sollten Sie show(FragmentManager, String) verwenden oder show(FragmentTransaction, String) verwenden, um eine Instanz von DialogFragment hinzuzufügen zu Ihrem UI hinzuzufügen, da diese verfolgen, wie DialogFragment sich selbst entfernen soll entfernt werden soll, wenn der Dialog beendet wird.

Ich verwende show, aber es funktioniert immer noch nicht richtig.

Jeder Hinweis ist sehr willkommen!

Prost Ali3n

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X