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



如果单击警报对话框的"确定"按钮,我需要完成一些活动。活动只是另一个片段的容器;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()

您需要将活动实例存储在对话界面之外,并且您将能够在对话界面上传递该实例。

应该是这样的。

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();
}
...
}

相关内容

最新更新