Для простоты: активность = [А], фрагмент 1 = [B] и Фрагмент 2 = [С]
Шаг 1: Создание интерфейса внутри [B], называется IOnInitiate[C]Listener
, и в пределах этого интерфейса создают метод под названием void Initiate[C]();
.
Шаг 2: Создайте частную собственность в [B] типа IOnInitiate[C]Listener
под названием (your-prefix-convention)OnInitiate[C]Listener
.
Шаг 3: Создать публичный метод в [B], называется public void SetInitiate[C]Listener(Activity activity)
и бросили параметр activity
в частной собственности, созданной на шаге 2.
Шаг 4: [А] должен реализовать интерфейс [B].IOnInitiate[C]Listener
и метод public void Initiate[C]()
.
Шаг 5: из [A], когда вы создаете новый экземпляр [B], обязательно вызовите метод с шага 3 и перейдите в this
для параметра Activity. В противном случае произойдет исключение null.
Шаг 6: Теперь, когда вам нужно инициировать [C] из [B], просто вызовите метод интерфейса из частной собственности [B]. Пример: (prefix)OnInitiate[C]Listener.Initiate[C]();
Это то, на что похожа моя. Я использую C# для своей разработки, поэтому ваш синтаксис может отличаться.
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();
}
}