Ich habe eine Aktivität und drei Fragmente. Die Anwendung startet und Fragment 1 ist sichtbar. Ich klicke auf einen Knopf. Das Fragment ist mit der Aktivität durch die folgende Schnittstelle und startet Fragment 2:Mehrere Fragmente mit einer Schnittstelle verwalten
public OnClickedListener listener;
static interface OnClickedListener{
public void buttonClicked(View v);
}
@Override
public void onAttach(Context context) {
super.onAttach(context);
Activity a;
if (context instanceof Activity){
a=(Activity) context;
this.listener = (OnClickedListener)a;
}
}
...
playBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { listener.buttonClicked(v); } });
Mein MainActivity implementiert Fragment1.OnClickedListener, die Daten empfängt und startet Fragment 2.
Jetzt bin ich in Fragment 2. Ich möchte auf einen Knopf klicken und Fragment 3 starten. Ich weiß, dass ich das tun kann, indem ich noch eine andere Schnittstelle in Fragment 2 implementiere, um dann mit dem Gesetz zu kommunizieren tivity und sag "Hey Launch Fragment 3". So, jetzt sieht Meine Aktivität wie dieses
MainActivity implements Fragment1.OnClickedListener,Fragment2.OnClickedListener
Das ist alles in Ordnung, aber lassen Sie uns sagen, dass ich 20 Fragmente haben. Ich möchte nicht 20 Schnittstellen in meiner Hauptaktivität implementiert haben. Gibt es eine Möglichkeit, eine einzige Schnittstelle zu erstellen und zu verwenden, um zwischen jedem einzelnen Fragment und der Aktivität zu kommunizieren? Wie würde das umgesetzt werden? Vielen Dank.
Ich bin ein wenig verwirrt. Ich habe eine separate Schnittstelle namens OnClickedListener erstellt. Ich habe es in Fragment1 erweitert und bin in der Lage, die Daten zu erhalten, wenn auf die Schaltfläche geklickt wird: listener.buttonClicked (MyFragmentClassName.this, v); Wie bekomme ich das jetzt zu meiner Haupttätigkeit? Sie haben oben geschrieben, dass meine Hauptaktivität wie folgt aussehen sollte: public class MainActivity extends Activity implementiert MainActivity.OnClickedListener. Ich bin mir nicht sicher, was Sie hier implementieren? –
Wie @mikhail sagte, deklariere die Schnittstelle in einer anderen Datei oder als verschachtelt in der MainActivity. –