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

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

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

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

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

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

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

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

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

Solutions Collecting From Web of "Связь между фрагментом и диалогом"

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

Вы можете использовать обратные вызовы. Просто выполните кнопку «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(); } });