【发布时间】:2017-09-01 12:09:34
【问题描述】:
我的应用中有 Activity,其中有几个片段。其中一个片段有一个 DialogFragment,它通过按钮单击调用。 DialogFragment 有 3 个按钮 - 正面、负面和中性。
public class CompanyNotConnectedToSRDialog extends DialogFragment {
public static final String TAG = CompanyNotConnectedToSRDialog.class.getSimpleName();
private NotConnectedDialogListener mNotConnectedDialogListener;
@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
return new AlertDialog.Builder(getActivity(), R.style.DefaultAlertDialogTheme)
.setTitle("Register")
.setMessage("Do you really want to register?")
.setNeutralButton("Skip", (dialog1, which) -> {
mNotConnectedDialogListener.onSkipBtnNotConnectedDialogPressed();
})
.setNegativeButton("Cancel", null)
.setPositiveButton("Register", (dialog12, which) -> {
mNotConnectedDialogListener.onSendBtnNotConnectedDialogPressed();
})
.create();
}
public interface NotConnectedDialogListener {
void onSkipBtnNotConnectedDialogPressed();
void onSendBtnNotConnectedDialogPressed();
}
public void setListener(NotConnectedDialogListener listener) {
this.mNotConnectedDialogListener = listener;
}
如您所见,我创建了公共接口,其中包含用于跳过和注册按钮的两个方法(取消按钮侦听器为空,因此没关系)和此侦听器的 Setter。 然后我在调用这个dialogFragment的片段中实现了这个接口,我重写了方法并像这样调用了dialogFragment:
if (mNotConnectedDialog == null) {
mNotConnectedDialog = new CompanyNotConnectedToSRDialog();
mNotConnectedDialog.setListener(this);
mNotConnectedDialog.show(getActivity().getFragmentManager(), CompanyNotConnectedToSRDialog.TAG);
} else {
mNotConnectedDialog.show(mActivity.getFragmentManager(), CompanyNotConnectedToSRDialog.TAG);
mNotConnectedDialog.setListener(this);
}
问题是如果我按下父片段中的按钮以显示 DialogFragment、旋转屏幕并按下 DialogFragment 中的任何按钮,我会收到 NullPointerException,因为我的侦听器为空。
java.lang.NullPointerException: Attempt to invoke interface method 'void com.myapp.ui.object.create.dialogs.CompanyNotConnectedToSRDialog$NotConnectedDialogListener.onSendBtnNotConnectedDialogPressed()' on a null object reference
at com.myapp.ui.object.create.dialogs.CompanyNotConnectedToSRDialog.lambda$onCreateDialog$1(CompanyNotConnectedToSRDialog.java:31)
如果这个解决方案有问题,如何处理这些点击并设置监听器?
PS:请不要告诉我android:configChanges。
【问题讨论】:
标签: android fragment android-dialogfragment