2016-07-31 3 views
0

私のフラグメントからDialogFragmentを起動し、ボタンをダイアログフラグメントで押すとMainActivityのイベントをリッスンしています。リスナーが呼び出されていません

これはDialogFragmentで定義されたリスナーインタフェースです:

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

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

DialogFragmentの正ボタンがクリックされたときに、リスナーを発射:

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

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

そして、私はMainActivityでリスナーをキャプチャ:

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

私は、デバイスのローテーションを変更していない場合、これは動作します。しかし、デバイスの回転を変更して同じことをやり直すと、コントロールは決してonDialogPositiveClickに届きません。

これが原因でデバイスが回転したときの変更点を教えてください。

+0

ここで、positiveButtonOnClickListenerをリッスンするように設定していますか? – lionscribe

+0

'DialogFragment'の中に? – user1324887

+0

あなたはコードのその部分を投稿しませんでした。 – lionscribe

答えて

0

リスナーはアクティビティ自体であるため、getActivity()の呼び出しによってonClickで直接使用できます。あなたは安全のためにコールを試すことができます。それを変数に設定する必要はありません。

+0

私が正しく理解していればわかりません。あなたは例を投稿してもいいですか? – user1324887

+0

private DialogInterface.OnClickListener positiveButtonOnClickListener = new DialogInterface.OnClickListener(){public void onClick(DialogInterface dialog、int id){((NewDialogListener)(getActivity()).DialogPositiveClick( "positive");}}; – lionscribe

+0

理由は、私です回転後に何らかの理由でmListenerが有効ではないと思われる場合は、 – lionscribe

関連する問題