如果在Fragment中实例化的AlertDialog的按钮监听器内调用,getActivity()可以为null吗?

时间:2018-04-16 22:22:14

标签: android nullpointerexception alertdialog android-alertdialog

如果" OK"我需要完成一些活动。单击AlertDialog按钮。活动只是另一个片段的容器; AlertDialog是在Fragment中构建的。像这样:

public class F extends Fragment {

...

    public void confirmExit() {

        new AlertDialog.Builder(getContext())
            ...
            .setPositiveButton("OK", (dialogInterface, i) -> getActivity().finish())
            ...
            .show();
    }

...

}

现在,AndroidStudio向我显示了这个警告:

  

方法调用'完成'可能会产生' java.lang.NullPointerException'

因此它认为getActivity()可能返回null。但这有可能吗?如果对话框在屏幕上并且可以交互,那么底层Activity是否可以为空?如果不是如何在不添加样板代码的情况下抑制此警告?

1 个答案:

答案 0 :(得分:-1)

是。 它可能会崩溃,因为您在界面上调用getActivity()而不是片段。

您需要在DialogInterface之外存储Activity的实例,并且您将能够在DialogInterface上传递实例。

应该是那样的。

public class F extends Fragment {
    private Context mContext;
...
    @Override
    void onAttach(Context context) {
        mContext = context
    }

    public void confirmExit() {

        new AlertDialog.Builder(getContext())
            ...
            .setPositiveButton("OK", (dialogInterface, i) -> ((YourParentActivity) mContext).finish())
            ...
            .show();
    }

...

}