Обновить фрагмент, когда диалоговое окно закрыто - PullRequest
17 голосов
/ 24 марта 2012

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

Ответы [ 5 ]

34 голосов
/ 08 апреля 2015

Вы можете добавить слушателя и переопределить 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");
4 голосов
/ 24 марта 2012

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

1 голос
/ 18 октября 2013

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

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

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

0 голосов
/ 06 января 2018

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

import android.app.Fragment; 

Но у меня это работает

  1. Создание класса интерфейса

    public interface MyDialogListener {
        void OnCloseDialog(Object obj); //you can put any object here
    }
    
  2. Реализация класса интерфейса в родительском фрагменте

    public class ActionBarFragment extends Fragment implements MyDialogListener{
    
        @Override
        public void OnCloseDialog(Object obj) {
            //Do you refresh
        }
    
  3. и затем я добавляю слушателя внутри 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);
        }
    
0 голосов
/ 12 ноября 2014

Я только что решил это в своем проекте.То, что у меня есть, это действие с 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();

Это помогает мне.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...