2016-07-31 35 views
0

Ich starte ein DialogFragment von meinem Fragment und höre ein Ereignis in MainActivity, wenn die Schaltfläche in Dialog Fragment gedrückt wird.Listener wird nicht aufgerufen

Dies ist die Listener-Schnittstelle in DialogFragment definiert:

public interface NewDialogListener { 
    public void onDialogPositiveClick(String data); 
} 

Instanziierungsanwendung den Hörer in DialogFragment:

@Override 
public void onAttach(Activity activity) { 
    super.onAttach(activity); 
    // Verify that the host activity implements the callback interface 
    try { 
     // Instantiate the NoticeDialogListener so we can send events to the host 
     mListener = (NewDialogListener) activity; 
    } catch (ClassCastException e) { 
     // The activity doesn't implement the interface, throw exception 
     throw new ClassCastException(activity.toString() 
       + " must implement NoticeDialogListener"); 
    } 
} 

@Override 
public AlertDialog onCreateDialog(Bundle savedInstanceState) { 
    currentActivity = getActivity(); 
    newDialog.getButton(AlertDialog.BUTTON_POSITIVE).setOnClickListener(positiveButtonViewOnClickListener); 
... 
return newDialog; 
} 

den Hörer abfeuern, wenn positive Taste in DialogFragment geklickt wird:

private DialogInterface.OnClickListener positiveButtonOnClickListener = new DialogInterface.OnClickListener() { 
    public void onClick(DialogInterface dialog, int id) { 

     mListener.onDialogPositiveClick("positive"); 
    } 
}; 

Und dann fange ich den Hörer in MainActivity:

@Override 
public void onDialogPositiveClick(String status) { 
    Fragment fragment = getVisibleFragment(); 
    if (fragment instanceof NewListFragment) { 
     ((NewListFragment)fragment).updateView(); 
    } 
} 

Dies funktioniert, wenn ich nicht die Drehung der Vorrichtung ändert. Aber wenn ich die Rotation des Gerätes ändere und dasselbe noch einmal mache, erreicht die Steuerung nie onDialogPositiveClick.

Was ändert sich, wenn das Gerät gedreht wird, was das verursachen könnte?

+0

Wo setzen Sie positiveButtonOnClickListener auf? – lionscribe

+0

Im 'DialogFragment'? – user1324887

+0

Sie haben diesen Teil des Codes nicht veröffentlicht. – lionscribe

Antwort

0

Da der Listener die Aktivität selbst ist, können Sie sie direkt in onClick über einen Aufruf von getActivity() verwenden. Sie können versuchen, den Anruf zu ergreifen, um sicher zu sein. Es muss nicht auf eine Variable festgelegt werden.

+0

Nicht sicher Wenn ich das richtig verstehe. Macht es Ihnen etwas aus, ein Beispiel zu geben? – user1324887

+0

private DialogInterface.OnClickListener positiveButtonOnClickListener = neu DialogInterface.OnClickListener() {public void onClick (DialogInterfacedialog, int id) {((NewDialogListener) (getActivity()). OnDialogPositiveClick ("positiv");}}; – lionscribe

+0

Grund, ich vermute, dass MListener aus irgendeinem Grund nach der Rotation nicht gültig ist. – lionscribe