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

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

Ответы на вопрос(5)

onDismiss () DialogFragment или при построении основного диалога установите слушателя с помощьюsetOnDimissListener ().

 cottonBallPaws09 дек. 2015 г., 22:02
Родитель может использовать эти методы, чтобы получить обратный вызов и ответить, когда он отклонен. Смотрите этот ответ для использования:stackoverflow.com/a/29518363/445348
 howettl17 сент. 2013 г., 23:57
Это информируетDialogFragment что это было отклонено, но не его родительский фрагмент, который является тем, что задал вопрос.

фрагмента:

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");
 FireZenk18 нояб. 2015 г., 15:28
Это правильный ответ

tivity и отобразить активность в виде диалога. В следующей ссылке есть совет, объясняющий, как это сделать:

http://developer.android.com/guide/topics/ui/dialogs.html

Вы можете использовать это для обновления основного фрагмента, потому что, когда диалог (который является действием) завершен, onResume () будет вызываться для основного фрагмента. Добавьте код для обновления состояния фрагмента в методе onResume (), и это все, что нужно.

 Iree03 авг. 2015 г., 19:12
Я думаю, что это лучший подход, но как насчет API 8+? Это было добавлено в API 11

у меня это не работает, я использую другой класс фрагмента

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
    }

а затем я добавляю слушателя внутри DialogFragment

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);
    }

что у меня есть, это активность с ListFragment. В этом фрагменте списка при щелчке по определенному элементу я отображаю DatePickerFragment (пользовательский DialogFragment, который отображает DatePickerDialog). Когда дата выбрана, я хочу обновить ListFragment.

Чтобы достичь этого, в действии, в котором размещается ListFragment (и он также содержит DatePickerFragment, по сути), я реализовал метод, который просто заменяет ListFragment новым экземпляром, например так:

public void criteriaChanged()
{
    getFragmentManager().beginTransaction()
            .replace(R.id.container, new FilterFragment())
            .commit();
}

Я вызываю этот метод из DatePickerFragment, из onDateSet ():

FilterActivity fa = (FilterActivity) getActivity();
fa.criteriaChanged();

Это делает трюк для меня.

Ваш ответ на вопрос