2017-04-13 163 views
0

我正在開發一個應用程序,並使用擴展DialogFragment的自定義對話框。該對話框將包含我想要傳遞給父活動的特定字段。我嘗試實現OnDismissListener,但參數是一個Dialog接口。使用onDismiss()從DialogFragment獲取信息

任何想法?

父活動:

fab.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View view) { 
      BreakCreator mDialog = new BreakCreator(); 
      mDialog.show(getSupportFragmentManager(), "start break Creator"); 

     } 
    }); 

聽衆:

@Override 
public void onDismiss(DialogInterface dialog) { 
    Log.d("debug", "in onDismiss"); 
     BreakCreator mBreakCreator = BreakCreator.class.cast(dialog);// This MIGHT not work 
    //TODO cast and shit 

     if(!mBreakCreator.isCancelled()){ 
      int startMinute = mBreakCreator.getStartMinute(); 
      int startHour = mBreakCreator.getStartHour(); 
      int endMinute = mBreakCreator.getEndMinute(); 
      int endHour = mBreakCreator.getEndHour(); 
      String day = mBreakCreator.getDay(); 

      Break mBreak = new Break(new ultramirinc.champs_mood.Time(startHour, startMinute), 
        new ultramirinc.champs_mood.Time(endHour, endMinute), day); 
      breakList.add(mBreak); 
      Log.d("created", "break added"); 
      recyclerView.invalidate(); 

     }else{ 
      Log.d("debug", "is not cancelled"); 
    } 
} 

對話框類:

public void onDismiss(final DialogInterface dialog) { 
    super.onDismiss(dialog); 
    final Activity activity = getActivity(); 
    if (activity instanceof DialogInterface.OnDismissListener) { 
     ((DialogInterface.OnDismissListener) activity).onDismiss(dialog); 
    } 
} 
+0

我不知道如何獲得信息,因爲我不能投DialogInterface到DialogFragment –

+0

閱讀[這](https://en.wikipedia.org/wiki/Observer_pattern),[這](HTTPS:/ /docs.oracle.com/javase/tutorial/uiswing/events/)和[this](https://www.google.se/url?sa=t&rct=j&q=&esrc=s&source=web&cd=15&cad=rja&uact=8&ved = 0ahUKEwiA7uXDoaLTAhWDjiwKHVnYBRAQFghxMA4&URL = HTTP%3A%2F%2Fwww.vogella.com%2Ftutorials%2FDesignPatternObserver%2Farticle.html與USG = AFQjCNGGgYexZpJrbf-LiedTH0yRc675rQ&SIG2 = OUgdD_VLKZWmUpfUsS_sLA) – rckrd

+0

我得到添加監聽到的對象的想法,但我的自定義DialogFragment似乎並不有一個方法:setOnDismissListener –

回答

0

使用自定義監聽器,下面是關於如何實現這一點的一個例子。這也在Android Developer Guide中解釋。

public class CustomDialog extends DialogFragment { 

    public interface CustomListener{ 
     void onMyCustomAction(CustomObject co); 
    } 

    private CustomListener mListener; 

    public void setMyCustomListener(CustomListener listener){ 
    mListener = listener; 
    } 

    @Override 
    public Dialog onCreateDialog(Bundle savedInstanceState) { 
     ... 
     Code to create dialog 
     ... 
    } 

    @Override 
    public void onDismiss(DialogInterface dialog) { 
     if(mListener != null){ 
      CustomObject o = new CustomObject(); 
      mListener.onMyCustomAction(o); 
     } 
     super.onDismiss(); 
    } 
} 

而且當創建自定義對話框時,請設置偵聽器。

CustomDialog awesomeDialog = new CustomDialog(); 
awesomeDialog.setMyCustomListener(new CustomDialog.CustomListener() { 
    @Override 
    public void onMyCustomAction(CustomObject o){ 
    Log.i("TAG",o.toString()); 
    } 
});