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

Связь между фрагментом и диалоговым интерфейсом

Я пытаюсь сделать Fragment, чтобы показать Dialog, используя DialogFragment API.

В моем диалоге есть только EditText, и я хочу передать строку, написанную на ней, обратно в Fragment.

Я могу показать диалог из Fragment, но я не могу получить строку из поля ввода обратно в мой Fragment.

Я попробовал оба способа создать диалог: перезапись метода DialogFragment.onCreateView и запись всего диалогового окна и перезапись DialogFragment.onCreateDialog и использование AlertDialog.Builder, чтобы упростить запись поведения кнопок.

Документация Android о диалогах передача событий обратно в диалоговый хост заключается в том, что хост всегда является Activity и никогда не Fragment. Я попытался обобщить поведение, чтобы использовать его в моем случае, но я не могу.

Я попытался использовать обратный вызов DialogFragment.onAttach, чтобы получить ссылку Activity и использовать интерфейс между Fragment и DialogFrament, и он отлично работает, но я не могу получить Fragment из Activity чтобы он работал.

Может кто-нибудь помочь с кратким примером?

Заранее спасибо

4b9b3361

Ответ 1

Вы можете использовать setTargetFragment и getTargetFragment методов Fragment. Вы можете установить Fragment в качестве цели DialogFragment, а затем получить ссылку на него из DialogFragment.

Ответ 2

вы можете использовать обратные вызовы. просто выполните кнопку "done" или что-то подобное в вашем диалоговом фрагменте.

поэтому в вашем диалоговом фрагменте сделайте что-то вроде этого:

protected OnDialogClickedListener callback = null;

public interface OnDialogClickedListener {
    public abstract void onDialogClicked(int position);
}

public void setOnDialogClickedListener(OnDialogClickedListener l){
    callback = l;
}

button.setOnItemClickListener(new OnItemClickListener() {
    public void onItemClick(AdapterView<?> parent, View v, int position, long id) {
        callback.onDialogClicked(position);
        dismiss();
    }
});

в вашей деятельности сделайте что-то вроде этого:

final YourFragment f = YourFragment .newInstance(0);
f.show(ft, "YourFragment ");
f.setOnDialogClickedListener(new OnDialogClickedListener() {
    @Override
    public void onDialogClicked(int position) {
        updateText(position);
        f.dismiss();
    }
});