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