2017-04-13 32 views
0

私はアプリを開発中で、DialogFragmentを拡張するカスタムダイアログを使用しています。このダイアログには、親アクティビティに渡す特定のフィールドが含まれます。私はOnDismissListenerを実装しようとしましたが、パラメータはDialog Interfaceです。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

私はDialogFragment –

+0

を読むDialogInterfaceをキャストすることはできませんので、情報を取得する方法を見当もつかない[この](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()); 
    } 
}); 
関連する問題