Как получить данные из SimpleDialogFragment во фрагмент?
У меня есть основной класс:
public class MainFragment extends Fragment implements OnClickListener, OnMarkerClickListener {}
У меня есть класс диалога:
public class PedirTaxiDialog extends SimpleDialogFragment implements
OnClickListener{}
Например: у меня есть FragmentA, с которого я запускаю SimpleDialogFragment (в поле есть EditText). Как я могу вернуть значение из EditText в FragmenaA? Я пытаюсь сделать много вещей... но у меня нет успеха. Помоги мне, пожалуйста!!
В моем классе MainFragment я показываю класс диалога:
FragmentActivity activity;
activity = (FragmentActivity) getActivity().new PedirTaxiDialog().show(activity.getSupportFragmentManager(), "Salvar Favoritos");
Я бы получил значения, введенные пользователем в диалоговом классе. Как я могу в своем MainFragment получить возврат PedirTaxiDialog?
ссылки классов:
2 ответа
Предположим, у вас есть этот код, где вы создаете свой диалог
FragmentManager fm = getActivity()
.getSupportFragmentManager();
PedirTaxiDialog dialog = PedirTaxiDialog();
dialog.setTargetFragment(MainFragment.this, "some request tag");
dialog.show(fm, "Salvar Favoritos");
Вызывая метод setTargetFragment()
вы включаете опцию для получения результата от DialogFragment, так как вы получаете результат от действия, когда вы запускаете его, используя startActivityForResult()
,
Таким образом, в вашем DialogFragment, когда пользователь нажимает кнопку "ОК", в OnClickListener вы должны создать намерение, указать его как введенную пользователем строку "Дополнительный текст", установить Result_OK и вызвать getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, yourIntent)
как это:
Intent i = new Intent();
i.putExtra("textInput", text);
i.setResult(Activity.RESULT_OK);
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, i);
И тогда в вашем MainFragment переопределить onActivityResult()
метод:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
if (resultCode == Activity.RESULT_OK && requestCode == "some request tag") {
String text = getStringExtra("textInput);
}
}
Вы можете получить доступ к своей активности из диалогового окна, если переопределите метод onAttach(Activity) вашего DialogFragment.
Например:
private MainActivity controller;
@Override
public void onAttach(Activity activity) {
super.onAttach(activity);
this.controller = (MainActivity) activity;
}
@Override
public void onDetach() {
this.controller = null;
super.onDetach();
}
Позже вы можете использовать объект контроллера для вызова методов вашей деятельности.
Ваша деятельность может обновить фрагмент.
Также рекомендуется разрешить вашей деятельности реализовать интерфейс обратного вызова и использовать этот интерфейс обратного вызова в качестве класса для переменной контроллера вместо использования самого класса действия.