2012-03-24 2 views

ответ

4

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

+16

Это сообщает 'DialogFragment', что он был уволен, но не является его родительским фрагментом, что и задал вопрос. – howettl

+0

Родитель может использовать эти методы для получения обратного вызова и ответа при его увольнении. См. Этот ответ для использования: http: // stackoverflow.com/a/29518363/445348 – cottonBallPaws

1

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

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

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

+0

Я думаю, что это лучший подход, но как насчет API 8+? Это было добавлено в API 11 – Iree

0

Я просто решил это в своем проекте. У меня есть активность с ListFragment. В этом фрагменте списка, когда нажимается конкретный элемент, я показываю DatePickerFragment (пользовательский диалог диалога, который отображает 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(); 

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

25

Вы можете добавить слушатель и переопределить 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"); 
+0

Это правильный ответ – FireZenk

0

Я попытался @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); 
        } 
    
Смежные вопросы