我在片段中启动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 :(得分:0)
由于侦听器本身就是活动,因此您可以通过调用getActivity()直接在onClick中使用它。你可以试试看是否安全。无需将其设置为变量。