Так как диалоговое окно "обернуто" в объект фрагмента, то передача данных в диалоговое окно и получение данных из диалогового окна реализуется так же, как и в случае работы с фрагментами.
Рассмотрим небольшой пример в качестве наглядной иллюстрации процесса обмена данными с диалоговым окном. Используем уже созданный проект, данные вводятся в поле ввода, после чего они передаются в диалоговое окно. Результат работы диалогового окна передается обратно в Activity, которое вызвало диалоговое окно.
publicclassMyDialogextendsDialogFragment {// Слушатель и интерфейс для передачи данных в ActivityprivateMyDialogListener mListener;publicstaticinterfaceMyDialogListener {voidonMyDialogResult(String choice); }// Статический метод для передачи данных в диалогpublicstaticMyDialognewInstance(String param1) {MyDialog fragment =newMyDialog();Bundle args =newBundle();args.putString(ARG_PARAM1, param1);fragment.setArguments(args);return fragment; }privatestaticfinalString ARG_PARAM1 ="param1";privateString mParam1;// Получаем данные из Bundle @OverridepublicvoidonCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); mParam1 =getArguments()==null?"null":getArguments().getString(ARG_PARAM1); } @NonNull @OverridepublicDialogonCreateDialog(@NullableBundle savedInstanceState) {AlertDialog.Builder builder =new AlertDialog.Builder(getActivity());builder.setTitle(mParam1);builder.setItems(R.array.dialog_choices, (dialog, which) -> {// При выборе пункта возвращаем данные в ActivitymListener.onMyDialogResult(getResources().getStringArray(R.array.dialog_choices)[which]);dismiss(); });returnbuilder.create(); }// Получаем объект слушателя @OverridepublicvoidonAttach(Context context) { super.onAttach(context);try { mListener = (MyDialogListener) context; } catch (ClassCastException ex) {thrownewClassCastException(context.toString() +" must implement MyDialog.MyDialogListener"); } } @OverridepublicvoidonDetach() { super.onDetach(); mListener =null; }}