У меня есть несколько фрагментов, которые нужно показать обычному диалогу. В этих диалогах пользователь может выбрать ответ да / нет, и тогда фрагмент должен вести себя соответствующим образом.
Теперь у Fragment
класса нет onCreateDialog()
метода для переопределения, поэтому я думаю, мне нужно реализовать диалоги снаружи, в содержащем Activity
. Ничего страшного, но тогда Activity
нужно как-то доложить выбранный ответ фрагменту. Я, конечно, мог бы использовать здесь шаблон обратного вызова, чтобы фрагмент регистрировался в Activity
классе слушателя, и Activity сообщало бы ответ через это или что-то в этом роде.
Но для такой простой задачи, как отображение «простого» диалога «да-нет» во фрагменте, это кажется большим беспорядком. Кроме того, таким образом my Fragment
будет менее замкнутым.
Есть ли более чистый способ сделать это?
Редактировать:
Ответ на этот вопрос не объясняет подробно, как следует использовать DialogFragments для отображения диалогов из фрагментов. Итак, AFAIK, путь:
- Показать фрагмент.
- При необходимости создайте экземпляр DialogFragment.
- Установите исходный фрагмент в качестве цели этого DialogFragment с помощью
.setTargetFragment()
. - Покажите DialogFragment с помощью .show () из исходного фрагмента.
- Когда пользователь выбирает какую-либо опцию в этом DialogFragment, уведомляет исходный фрагмент об этом выборе (например, пользователь нажал «да»), вы можете получить ссылку на исходный фрагмент с помощью .getTarget ().
- Закройте DialogFragment.
источник
Ответы:
Вместо этого вы должны использовать DialogFragment .
источник
Activity
объект целиком, используя методыputFragment
и , позволяя объекту отчитываться непосредственно вызывающему фрагменту (даже после изменения ориентации).getFragment
FragmentManager
DialogFragment
Я должен осторожно сомневаться в ранее принятом ответе о том, что использование DialogFragment - лучший вариант. Предполагаемая (основная) цель DialogFragment, кажется, состоит в том, чтобы отображать фрагменты, которые сами по себе являются диалогами, а не отображать фрагменты, у которых есть диалоги для отображения.
Я считаю, что использование активности фрагмента в качестве посредника между диалогом и фрагментом является предпочтительным вариантом.
источник
onCreateDialog
подход с управляемыми диалогами ( ) скоро станет устаревшим, я не согласен и скажу, чтоDialogFragment
это действительно правильный путь.Вот полный пример DialogFragment да / нет:
Класс:
Чтобы начать диалог:
Вы также можете позволить классу реализовать onClickListener и использовать его вместо встроенных слушателей.
Обратный вызов к активности
Если вы хотите реализовать обратный вызов, вот как это делается в вашей деятельности:
и
Класс обратного вызова:
Затем, чтобы выполнить обратный вызов из фрагмента, вам нужно убедиться, что слушатель прикреплен следующим образом:
И обратный вызов выполняется так:
источник
Для меня это было следующее-
MyFragment:
MyDialog:
Деятельность:
Макет DialogFragment:
Как
dialogfragment_heightfixhiddenbtn
видно из названия , я просто не мог найти способ исправить то, что высота нижней кнопки была уменьшена вдвое, несмотря на тоwrap_content
, что я сказал , поэтому я добавил скрытую кнопку, чтобы вместо этого «разрезать» пополам. Простите за взлом.источник
setTargetFragment()
правильно воссоздается системой, когда она перезапускает набор действий / фрагментов после вращения. Таким образом, ссылка будет указывать на новую цель автоматически.public interface ShowDialog { void showDialog(DialogFragment dialogFragment); }
где .test_dialog имеет пользовательский XML
источник
Я сам новичок и, честно говоря, не смог найти удовлетворительного ответа, который я мог бы понять или реализовать.
Итак, вот внешняя ссылка, которая действительно помогла мне добиться того, чего я хотел. Это очень просто и легко следовать.
http://www.helloandroid.com/tutorials/how-display-custom-dialog-your-android-application
ЭТО ЧТО Я ПЫТАЛСЯ ДОСТИГАТЬ С КОДОМ:
У меня есть MainActivity, в котором размещен фрагмент. Я хотел, чтобы диалоговое окно отображалось поверх макета, чтобы запрашивать ввод пользователя, а затем обрабатывать ввод соответствующим образом. Посмотреть скриншот
Вот как выглядит onCreateView моего фрагмента
Я надеюсь это поможет тебе
Сообщите мне, если возникнет путаница. :)
источник
источник