Как получить нажатие кнопки в fragmentе хоста из fragmentа диалога

У меня есть listFragment, где я хочу отобразить DialogFragment (Да / Нет) в listItemClick. Я хочу вернуть пользовательский выбор (Да / Нет) в listFragment. Я прочитал о механизме интерфейса слушателя, но работает с fragmentом активности . Один из способов сделать это можно:

  1. Определите интерфейс в fragmentе диалога, содержащий функции выбора кнопок да / нет, и вызовите эти методы в диалоговом окне предупреждения о положительном / отрицательном нажатии кнопки.
  2. Внедрите этот интерфейс в основную деятельность.
  3. Инициировать диалогFragment в спискеFragment onItem click.
  4. Сохраните выбор пользователя в действии.
  5. получите этот выбор в спискеFragment другим интерфейсом, реализованным в Основной деятельности.

Но есть ли у нас простой механизм для этой простой задачи? любой пример или код?

Существует еще один способ вернуть результат из диалогового windows.

Вы можете использовать Fragment.setTargetFragment () . При создании экземпляра вашего DialogFragment установите для него целевой fragment. Затем в DialogFragment вы можете получить этот fragment из Fragment.getTargetFragment () .

Например, вы можете сделать это так:

public interface DialogClickListener { public void onYesClick(); public void onNoClick(); } 
 public class MyListFragment extends ListFragment implements DialogClickListener { ... private void showDialog() { DialogFragment dialog = new MyDialogFragment(); dialog.setTargetFragment(this, 0); dialog.show(getFragmentManager(), "dialog"); } @Override public void onYesClick() { // do something } @Override public void onNoClick() { // do something } } 
 public class MyDialogFragment extends DialogFragment { private DialogClickListener callback; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); try { callback = (DialogClickListener) getTargetFragment(); } catch (ClassCastException e) { throw new ClassCastException("Calling fragment must implement DialogClickListener interface"); } } @Override public Dialog onCreateDialog(Bundle savedInstanceState) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setMessage("message") .setPositiveButton("Yes", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { callback.onYesClick(); } }).setNegativeButton("No", new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int id) { callback.onNoClick(); } }); return builder.create(); } } 

Вы также можете использовать шину событий для облегчения связи между компонентами. Отто – отличная библиотека для использования здесь -> https://github.com/square/otto . Это сделано партией Square, чтобы вы знали его качественный проект с открытым исходным кодом.

У них есть образец в репозитории, который показывает вам, как легко его использовать.

  • Как реализовать onBackPressed () & intents в fragmentе?
  • getActivity () возвращает значение null в функции Фрагмент
  • Начать fragment через Intent внутри fragmentа
  • Каковы различия между активностью и fragmentом
  • Как проверить, является ли вид fragmentа видимым для пользователя?
  • Почему обращается к TextView fragmentа внутри операции, вызывая ошибку
  • Android Fragment для ID не найдено?
  • Стандартный переход fragmentа не оживляющий
  • Как передать переменную от Activity to Fragment и передать ее обратно?
  • Где / Как getIntent (). GetExtras () в Android Fragment?
  • Обновление данных в ListFragment как часть ViewPager
  • Давайте будем гением компьютера.