Можно ли каким-либо образом обнаружить, когда DialogFragment уволен, так что я могу обновить его родительский фрагмент?
Обновить фрагмент при отклонении диалоговогофрагмента
Ответ 1
Вы можете добавить слушателя и переопределить диалог onDismiss вашего фрагмента:
public class DismissDialog extends DialogFragment {
private DialogInterface.OnDismissListener onDismissListener;
public void setOnDismissListener(DialogInterface.OnDismissListener onDismissListener) {
this.onDismissListener = onDismissListener;
}
@Override
public void onDismiss(DialogInterface dialog) {
super.onDismiss(dialog);
if (onDismissListener != null) {
onDismissListener.onDismiss(dialog);
}
}
}
Затем, на родительском, вы установите слушателя:
DismissDialog d = new DismissDialog();
d.setOnDismissListener(new DialogInterface.OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
}
});
d.show(getSupportFragmentManager(), "sometag");
Ответ 2
Переопределить onDismiss() диалогового окна DialogFragment или при создании базового диалога установить прослушиватель с помощью setOnDimissListener().
Ответ 3
Один из способов борьбы с этим - встраивать свой DialogFragment в Activity и отображать активность как диалог, есть подсказка в следующей ссылке, которая объясняет, как:
http://developer.android.com/guide/topics/ui/dialogs.html
Вы можете использовать это, чтобы обновить базовый фрагмент, потому что когда Dialog (который является Activity) закончен, onResume() будет вызываться в базовом фрагменте. Добавьте код, чтобы обновить состояние фрагмента в методе onResume() и что все это тоже есть.
Ответ 4
Я просто решил это в своем проекте. У меня есть активность с ListFragment. В этом фрагменте списка, когда нажимается конкретный элемент, я показываю DatePickerFragment (пользовательский диалог диалога, который отображает DatePickerDialog). Когда выбрана дата, я хочу, чтобы ListFragment обновлялся.
Чтобы достичь этого, в действии, в котором размещен ListFragment (а также он также размещает DatePickerFragment, по сути), я реализовал метод, который просто заменяет ListFragment новым экземпляром, например:
public void criteriaChanged()
{
getFragmentManager().beginTransaction()
.replace(R.id.container, new FilterFragment())
.commit();
}
Я вызываю этот метод из DatePickerFragment, from onDateSet():
FilterActivity fa = (FilterActivity) getActivity();
fa.criteriaChanged();
Это трюк для меня.
Ответ 5
Я попробовал ответить @Gazer, это не работает для меня, я использую другой класс фрагмента
import android.app.Fragment;
Но я получил эту работу
-
Создайте класс интерфейса
public interface MyDialogListener { void OnCloseDialog(Object obj); //you can put any object here }
-
Внедрить класс интерфейса в родительском фрагменте
public class ActionBarFragment extends Fragment implements MyDialogListener{ @Override public void OnCloseDialog(Object obj) { //Do you refresh }
-
а затем добавьте слушателя внутри диалогового окна
public class SpecialDialogFragment extends DialogFragment { MyDialogListener mListener; public SpecialDialogFragment(MyDialogListener listener) { this.mListener = listener; } @Override public void onStop() { super.onStop(); if(mListener!=null) mListener.OnCloseDialog(null); }