Існує набагато простіший спосіб отримати результат від DialogFragment.
По-перше, у вашій діяльності, фрагменті чи фрагменті активності потрібно додати таку інформацію:
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
// Stuff to do, dependent on requestCode and resultCode
if(requestCode == 1) { // 1 is an arbitrary number, can be any int
// This is the return result of your DialogFragment
if(resultCode == 1) { // 1 is an arbitrary number, can be any int
// Now do what you need to do after the dialog dismisses.
}
}
}
В requestCode
основному, ваш int мітка для DialogFragment, який ви викликали, я покажу, як це працює за секунду. Код результатів - це код, який ви надсилаєте назад із DialogFragment, повідомляючи про свою поточну активність очікування, фрагмент або FragmentActivity про те, що сталося.
Наступний фрагмент коду, який слід запустити, - це виклик до DialogFragment. Приклад тут:
DialogFragment dialogFrag = new MyDialogFragment();
// This is the requestCode that you are sending.
dialogFrag.setTargetFragment(this, 1);
// This is the tag, "dialog" being sent.
dialogFrag.show(getFragmentManager(), "dialog");
За допомогою цих трьох рядків ви декларуєте свій DialogFragment, встановлюючи codeCode (який буде викликати onActivityResult (...), коли діалог буде відхилений, і ви покажете діалогове вікно. Це все просто.
Тепер у діалоговому фрагменті вам потрібно просто додати один рядок безпосередньо перед dismiss()
тим, щоб ви повернули результат коду до onActivityResult ().
getTargetFragment().onActivityResult(getTargetRequestCode(), resultCode, getActivity().getIntent());
dismiss();
Це воно. Зауважте, код коду результату визначається таким, int resultCode
який я встановив resultCode = 1;
у цьому випадку.
Ось так, тепер ви можете відправити результат свого DialogFragment назад у свою діяльність виклику, фрагмент або FragmentActivity.
Крім того, схоже, що ця інформація була розміщена раніше, але не було достатнього прикладу, тому я подумав, що я надам більше деталей.
РЕДАКЦІЯ 24.06.2016
Прошу вибачення за помилковий код вище. Але ви, безумовно, не можете отримати результат назад до діяльності, розглядаючи як рядок:
dialogFrag.setTargetFragment(this, 1);
встановлює ціль, Fragment
а не Activity
. Отже, для цього вам потрібно скористатися втіленням InterfaceCommunicator
.
У вашому DialogFragment
наборі глобальна змінна
public InterfaceCommunicator interfaceCommunicator;
Створіть загальнодоступну функцію для її обробки
public interface InterfaceCommunicator {
void sendRequestCode(int code);
}
Потім , коли ви будете готові відправити код назад до Activity
коли DialogFragment
виконуються біг, просто додайте рядок перед вами dismiss();
вашим DialogFragment
:
interfaceCommunicator.sendRequestCode(1); // the parameter is any int code you choose.
У вашій діяльності зараз вам потрібно зробити дві речі, перше - видалити той рядок коду, який більше не застосовується:
dialogFrag.setTargetFragment(this, 1);
Потім реалізуйте інтерфейс і все закінчено. Ви можете зробити це, додавши наступний рядок до implements
пункту в самому верху вашого класу:
public class MyClass Activity implements MyDialogFragment.InterfaceCommunicator
А потім @Override
функція в діяльності,
@Override
public void sendRequestCode(int code) {
// your code here
}
Ви використовуєте цей метод інтерфейсу так само, як і onActivityResult()
метод. За винятком того, що метод інтерфейсу призначений для, DialogFragments
а інший - для Fragments
.