Работает только коммуникатор из второго фрагмента
Это потому, что у вас есть два разных экземпляра коммуникатора в каждом из ваших фрагментов. Когда вы настраиваете ViewPager
, второй фрагмент является последним, который присоединяется к родительскому фрагменту. Следовательно, communicator
, который вы инициализируете внутри функции onAttachFragment
вашего класса MainDialogFragment
, хранит ссылку только из второго фрагмента, так как он был последним, который будет прикреплен здесь.
В вашем случае я бы предпочел очень простую реализацию с использованием функций жизненного цикла Fragment
. Просто возьмите переменную public static
в вашем классе MainDialogFragment
, которая покажет, была ли нажата кнопка «ОК» или нет. А затем проверьте значение этой переменной из каждого вашего Fragment
класса внутри функции onResume
и выполните задачи соответствующим образом. Чтобы получить представление о реализации, пожалуйста, проверьте следующее.
Получите переменную в вашем классе MainDialogFragment
, как показано ниже.
public static boolean isDialogOkayClicked = false; // Default false
Теперь в вашем MainFragmentA
реализуйте функцию onResume
и проверьте значение из MainDialogFragment
. Действуй соответственно.
public class MainFragmentA extends Fragment implements Communicator{
View rootView;
@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
rootView = inflater.inflate(R.layout.fragment_a, container, false);
return rootView;
}
@Override
protected void onResume() {
super.onResume();
if(MainDialogFragment.isDialogOkayClicked)
doSomething();
}
@Override
public void onConfirmClick() {
Toast.makeText(getContext(), "Fragment A!!", Toast.LENGTH_SHORT).show();
}
}
Сделайте то же самое для вашего другого фрагмента.
Надеюсь, это поможет!