2017-04-13 16 views
0

Ich arbeite an einer App und verwende ein benutzerdefiniertes Dialogfeld, das DialogFragment erweitert. Dieser Dialog enthält bestimmte Felder, die ich an die übergeordnete Aktivität übergeben möchte. Ich habe versucht, OnDismissListener zu implementieren, aber der Parameter ist eine Dialogschnittstelle.Abrufen von Informationen aus DialogFragment mit onDismiss()

Irgendeine Idee?

Mutter Aktivität:

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

     } 
    }); 

Zuhörer:

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

Dialog Klasse:

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

Ich habe keine Ahnung, wie die Informationen zu bekommen, da ich nicht DialogInterface in DialogFragment –

+0

Read [diese] (https://en.wikipedia.org/wiki/Observer_pattern) abgeben kann, [diese] (https://docs.oracle.com/javase/tutorial/uiswing/events/) und [dies] (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

bekomme ich die Idee, einen Zuhörer zu einem Objekt hinzuzufügen, noch meine Gewohnheit DialogFragment scheint nicht eine Methode haben: setOnDismissListener –

Antwort

0

einen benutzerdefinierten Hörer verwenden, unten ist ein Beispiel dafür, wie diese umgesetzt werden könnten. Dies wird auch in der Android Developer Guide erläutert.

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

Wenn der benutzerdefinierte Dialog erstellt wird, legen Sie den Listener fest.

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