Как вызвать метод фрагмента из другого фрагмента?

#java #android #android-fragments #deprecated

#java #Android #android-фрагменты #устаревший

Вопрос:

Как я могу вызвать метод фрагмента из DialogFragment, зная, что TargetFragment теперь устарел?

В прошлом я мог делать это таким образом:

ParentFragment

 DialogFragment dialog = new DialogFragment();
dialog.setTargetFragment(this, 0);
dialog.show(this.getSupportFragmentManager(), "tag");
 

DialogFragment

 ((ParentFragment) this.getTargetFragment()).myMethod();
 

Это больше невозможно, потому что TargetFragment теперь устарел.

Я читал, что я могу использовать setFragmentResultListener() для передачи переменных, но как я могу вызвать метод ParentFragment.myMethod() из DialogFragment?

Ответ №1:

Вот решение, которое я нашел.

ParentFragment

 public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.getParentFragmentManager().setFragmentResultListener("result", this, new FragmentResultListener() {
        public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle bundle) {
            String action = bundle.getString("action");
            if (action != null)
                if (action.equals("myMethod"))
                    ParentFragment.this.myMethod();
        }
    });
}
 

DialogFragment

 Bundle result = new Bundle();
result.putString("action", "myMethod");
this.getParentFragmentManager().setFragmentResult("result", result);
 

Комментарии:

1. Новый способ выглядит излишне сложным по сравнению со старым способом…