Подтвердить что ты не робот

Обновить фрагмент при отклонении диалоговогофрагмента

Можно ли каким-либо образом обнаружить, когда DialogFragment уволен, так что я могу обновить его родительский фрагмент?

4b9b3361

Ответ 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);
        }