【发布时间】:2018-06-08 06:19:15
【问题描述】:
我能找到的最接近的现有问题是Android Studio 3.0 lint warnings for references to activity,但它没有帮助。
使用 AndroidStudio 3.0.1,我有一个 DialogFragment,我在其中做这些通常的事情:
@Override
@NonNull
public Dialog onCreateDialog(Bundle savedInstanceState) {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
...
Argument 'getActivity()' might be null 我有一个棉绒警告在抱怨我。
我了解 为什么 getActivity() 可能为空,并且我了解 lint 检查如何知道这一点(来自 @Nullable 注释)。
我的问题是:getActivity() 可能为空,这很好,但实际上我应该如何优雅而整洁地处理这个问题? onCreateDialog 必须返回一个Dialog(因为超类的@Nullable注解)所以我必须有Activity上下文来创建它。
我可以假设如果 DialogFragment 未附加到 Activity,则永远不会调用 onCreateDialog,但仍然 - 如何解决不整洁的 lint 警告?
【问题讨论】:
-
“我该如何解决不整洁的 lint 警告?” -- 压制它并继续前进。
-
为什么不用getContext()
-
也许您可以依靠 onActivityCreated 或 onAttach(已弃用),这将为您提供有效的参考。然后用它代替 getActivity() ?
-
@CommonsWare 是你推荐的
@SuppressWarnings("ConstantConditions")吗? -
如果这是快速修复所建议的,并且有效,那么是的。或者,如果您发现注释比突出显示的代码段更烦人,请在精神上抑制它。或者,将
null签入并在实际为null的情况下抛出IllegalStateException(这不应该发生)。