Как получить данные из 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?

ссылки классов:

http://www.ararimed.com/PedirTaxiDialog.java

httP://www.ararimed.com/MainFragment.java

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();
}

Позже вы можете использовать объект контроллера для вызова методов вашей деятельности.

Ваша деятельность может обновить фрагмент.

Также рекомендуется разрешить вашей деятельности реализовать интерфейс обратного вызова и использовать этот интерфейс обратного вызова в качестве класса для переменной контроллера вместо использования самого класса действия.

Другие вопросы по тегам