听众没有被召唤

时间:2016-07-31 03:41:20

标签: android android-fragments android-dialogfragment

我在片段中启动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

什么是旋转设备时可能会导致这种情况发生变化?

1 个答案:

答案 0 :(得分:0)

由于侦听器本身就是活动,因此您可以通过调用getActivity()直接在onClick中使用它。你可以试试看是否安全。无需将其设置为变量。