Подтвердить что ты не робот

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

Представьте, у меня есть FragmentA, из которого я запускаю DialogFragment (в поле есть EditText). Как мне вернуть значение из EditText в FragmentA? Я пытаюсь сделать что-то вроде this и this, но мне не удалось.

4b9b3361

Ответ 1

Метод Fragment.onActivityResult() полезен в этой ситуации. Требуется getTargetRequestCode(), который представляет собой код, который вы устанавливаете между фрагментами, чтобы их можно было идентифицировать. Кроме того, он принимает код запроса, обычно просто 0, если код работает хорошо, а затем Intent, который вы также можете присоединить к строке

Intent intent = new Intent();
intent.putExtra("STRING_RESULT", str);

Кроме того, setTargetFragment(Fragment, requestCode) должен использоваться в фрагменте, который отправляется с целью его идентификации. В целом, у вас будет код в запрашивающем фрагменте, который выглядит следующим образом:

FragmentManager fm = getActivity().getSupportFragmentManager();
DialogFragment dialogFragment = new DialogFragment();
dialogFragment.setTargetFragment(this, REQUEST_CODE);
dialogFragment.show();

Класс для отправки данных (DialogFragment) будет использовать этот фрагмент, который мы только что определили, чтобы отправить данные:

private void sendResult(int REQUEST_CODE) {
    Intent intent = new Intent();
    intent.putStringExtra(EDIT_TEXT_BUNDLE_KEY, editTextString);
    getTargetFragment().onActivityResult(
        getTargetRequestCode(), REQUEST_CODE, intent);
}

Чтобы получить данные, мы используем этот тип класса в Фрагменте, который изначально запустил DialogFragment:

public void onActivityResult(int requestCode, int resultCode, Intent data) {
    // Make sure fragment codes match up 
    if (requestCode == DialogFragment.REQUEST_CODE) {
        String editTextString = data.getStringExtra(
            DialogFragment.EDIT_TEXT_BUNDLE_KEY);

В этот момент у вас есть строка из EditText из DialogFragment в родительском фрагменте. Просто используйте метод sendResult(int) в вашем анонимном классе TextChangeListener(), чтобы текст был отправлен, когда вам это нужно.

Ответ 2

Вам необходимо отправить данные из диалога обратно в действие с помощью метода обратного вызова, а затем вернуть данные обратно к фрагменту, к которому вы хотите перейти. Просто быстрый пример:

public void datFromDialog(String data){
    MyFragment mf = (MyFragment)getFragmentManager().findFragmentById(r.id.frag);

    mf.iWantNewData(data);
}