2016-08-06 67 views
0

Ich habe eine DialogFragment erfolgreich mit meiner MainActivity arbeiten. Er fordert die doPositiveClick() Methode Aktivität mitIn DialogFragment, das von zwei verschiedenen Aktivitäten aufgerufen wird, wie wird für diesen Fall in die aufrufende Aktivität zurückgeworfen?

((MainActivity)getActivity()).doPositiveClick() 

So weit so gut, aber jetzt mag ich die gleichen DialogFragment mit SecondActivity wieder verwenden. Ich habe mit der Syntax der obigen Zeile experimentiert, aber ich habe immer noch keinen Weg gefunden, MainActivity durch etwas zu ersetzen, das MainActivity oder SecondActivity bezeichnen könnte, je nachdem, welches DialogFragment genannt wurde. Ich hatte beide Tätigkeiten, die eine Schnittstelle mit doPositiveClick() implementieren, aber noch habe ich nicht die richtige Syntax getroffen, um meine Anforderung zu erfüllen.

Lassen Sie mich klar sein: Ich frage eine Ja oder Nein Frage. Kann ich die obige Zeile anpassen, sodass ich keine Listener an einer Schnittstelle einbeziehen muss? Ist ja, wie? Wenn nein, fair genug.

+0

Ich würde sagen, mit einer Schnittstelle ist der beste Weg. Der einzige andere Weg, den ich mir vorstellen kann, ist die Verwendung von 'instanceof' und einer if-Anweisung. Die Implementierung einer Schnittstelle in beiden Aktivitäten klingt jedoch sinnvoll. Irgendein Grund dagegen? –

+0

Meine Frage dreht sich um Casting. Ich möchte wissen, ob es eine Möglichkeit gibt, in dieser Situation angemessen zu wirken und so eine viel effizientere Implementierung zu erreichen, anstatt eine ganz neue Schnittstelle einbringen zu müssen. – Reg

Antwort

1

Schnittstelle ist die beste Vorgehensweise für die Kommunikation mit dem Fragment zu Aktivität (nicht gegenüber). Sie können einfach eine übergeordnete Aktivität implementieren Ihre Schnittstelle und machen Sie Ihre Hauptaktivität und zweite Aktivität Kind. Sie müssen also nicht implementieren. Sie können die Methoden einfach überschreiben. Also, welche Aktivität das Fragment erzeugt, wird diese Aktivitätsüberschreibungsmethode ausgelöst, wenn Fragmente aufgerufen werden. Ich hoffe, ich verstehe dein Problem wirklich und antworte wirklich. Jede Frage bitte kommentieren. So kann ich per Kommentar antworten und auch meine Antwort bearbeiten.

Update: Einfach ja :) In Ihrem Fragment OnAttach-Methode können Sie steuern, welche Aktivität dieses Fragment erstellen. Ich hoffe, dass Sie damit zufrieden sind.

@Override 
    public void onAttach(Activity activity) { 
     super.onAttach(activity); 
     if (activity instanceof MainActivity) ... 
     if (activity instanceof SecondActivity) ... 
    } 
+0

Ich möchte wissen, ob es möglich ist, eine funktionierende Lösung durch entsprechendes Gießen in der gegebenen Zeile zu erzeugen (eine 'Ja' oder 'Nein' Antwort). Meine Frage hat mehr mit Casting zu tun als eine Lösung für dieses spezielle Problem. Ich stimme Ihnen jedoch zu, dass das Generieren von MainActivity- und SecondActivity-Child-Elementen von ParentActivity in dem von Ihnen vorgeschlagenen Sway bedeutet, dass wir in der angegebenen Zeile einfach "MainActivity" in "ParentActivity" ändern können. Wenn jemand also eine Besetzung vorschlägt, die funktioniert, ohne eine neue Klasse oder Schnittstelle einzuführen, werde ich Ihre Antwort akzeptieren. – Reg

+0

Ich möchte antworten wie ja, nein, aber ich habe sicher, was Sie wirklich fragen. Aber nach deinem Kommentar kann ich antworten wie du willst. ** Ja ** :) Überprüfen Sie die Antwort. Es ist aktualisiert. –