Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果在片段内实例化的AlertDialog的按钮侦听器中调用,getActivity()是否可以为null?_Android_Nullpointerexception_Android Alertdialog - Fatal编程技术网

Android 如果在片段内实例化的AlertDialog的按钮侦听器中调用,getActivity()是否可以为null?

Android 如果在片段内实例化的AlertDialog的按钮侦听器中调用,getActivity()是否可以为null?,android,nullpointerexception,android-alertdialog,Android,Nullpointerexception,Android Alertdialog,如果单击AlertDialog的OK按钮,我需要完成一些活动。活动只是另一个片段的容器;AlertDialog构建在片段内部。大概是这样的: public class F extends Fragment { ... public void confirmExit() { new AlertDialog.Builder(getContext()) ... .setPositiveButton("OK", (dialog

如果单击AlertDialog的OK按钮,我需要完成一些活动。活动只是另一个片段的容器;AlertDialog构建在片段内部。大概是这样的:

public class F extends Fragment {

...

    public void confirmExit() {

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

...

}
现在,AndroidStudio向我显示以下警告:

方法调用“finish”可能会生成“java.lang.NullPointerException”

因此它认为getActivity可能返回null。但这有可能吗?如果对话框在屏幕上且可交互,则基础活动是否可以为空?如果没有,如何在不添加样板代码的情况下抑制此警告?

是。 它可能会崩溃,因为您在接口上而不是在片段上调用getActivity

您需要在DialogInterface外部存储活动的实例,并且您将能够在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();
    }

...

}

在上面问题中的代码中,侦听器最终成为一个匿名的内部类,该类具有对其外部类的引用。那么,您认为哪个对象拥有getActivity方法?不,它不会崩溃!实际上它现在正在工作。这个问题是关于一种可能的情况,它可能会使应用程序崩溃,但不会或不会崩溃。