如果" 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是否可以为空?如果不是如何在不添加样板代码的情况下抑制此警告?
答案 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();
}
...
}