Zur Vereinfachung: Aktivität = [A], Fragment 1 = [B] und Fragment 2 = [C]
Schritt 1: Erstellen einer Schnittstelle innen [B] genannt IOnInitiate[C]Listener
und innerhalb dieser Schnittstelle ein erstellen Methode genannt void Initiate[C]();
.
Schritt 2: Erstellen Sie eine private Eigenschaft innerhalb von [B] vom Typ IOnInitiate[C]Listener
mit der Bezeichnung (your-prefix-convention)OnInitiate[C]Listener
.
Schritt 3: Erstellen Sie eine öffentliche Methode in [B] public void SetInitiate[C]Listener(Activity activity)
genannt, und wirft die activity
Parameter in das Privateigentum in Schritt 2 erstellt
Schritt 4: [A] muss implementieren die Schnittstelle [B].IOnInitiate[C]Listener
und die Methode public void Initiate[C]()
. Wenn Sie eine neue Instanz von [B] erstellen, müssen Sie die Methode aus Schritt 3 aufrufen und this
für den Activity-Parameter übergeben. Andernfalls wird eine Null-Ausnahme auftreten.
Schritt 6: Wenn Sie nun [C] von [B] einleiten müssen, rufen Sie einfach die Interface-Methode aus der privaten Eigenschaft von [B] auf. Beispiel: (prefix)OnInitiate[C]Listener.Initiate[C]();
So sieht meine aus. Ich verwende C# für meine Entwicklung, so dass Ihre Syntax anders sein kann.
public class A : Activity, B.IOnInitiateCListener
{
private void InitiateB()
{
B b = new B();
b.SetInitiateCListener(this);
b.Show(FragmentManager, "B");
}
public void InitiateC()
{
C c = new C();
c.Show(FragmentManager, "C");
}
}
public class B : Fragment
{
public interface IOnInitiateCListener
{
void InitiateC();
}
private IOnInitiateCListener _IOnInitiateCListener;
public void SetInitiateCListener(Activity activity)
{
_IOnInitiateCListener = (IOnInitiateCListener)activity;
}
private void InitiateC()
{
_IOnInitiateCListener.InitiateC();
}
}