是否建议在每次 findViewById 调用时检查视图是否为空?
Posted
技术标签:
【中文标题】是否建议在每次 findViewById 调用时检查视图是否为空?【英文标题】:Is it recommended to check view for null with every findViewById call? 【发布时间】:2014-06-27 11:10:55 【问题描述】:当使用findViewById
膨胀元素时,android Studio 总是警告我我的膨胀视图可能返回 null
View v = inflater.inflate(R.layout.fragment_photo_gallery, container, false);
并建议我用 null 检查围绕我的语句:
if (v != null)
mGridView = (GridView)v.findViewById(R.id.gridView);
是否建议在膨胀元素之前始终进行上述的空检查?
编辑:添加 lint 图片
【问题讨论】:
【参考方案1】:我认为你永远不应该那样做。
如果您这样做,您将掩盖程序中的逻辑错误,以防您将错误的 id 传递给您的 findView。
如果你传递了一个正确的 id 但由于任何原因 inflater 返回 null 那是 Android 问题(这永远不会发生),你也不应该做任何事情。
我认为此警告并非来自 Android Lint。
【讨论】:
添加了显示我在 Android Studio 中收到的 lint 警告的图像。【参考方案2】:如果您确定要传递的 id 确实存在于应用程序上下文中,则可以忽略此警告并继续执行您的代码查看因为
View v = inflater.inflate(R.layout.fragment_photo_gallery, container, false);
如果 "R.layout.fragment_photo_gallery" 不正确或将 v 渲染为 null 无效,将返回 null。
于是就有了这样的尝试
mGridView = (GridView)v.findViewById(R.id.gridView);
可能导致空指针异常
【讨论】:
以上是关于是否建议在每次 findViewById 调用时检查视图是否为空?的主要内容,如果未能解决你的问题,请参考以下文章
如何在一个imageview中为每次点击调用不同的可绘制动画?
在 setContentView() 之前调用 findViewById() 会导致 NullPointerException 但并非总是如此? [复制]
NullPointerException:尝试在空对象引用上调用虚拟方法 findViewById(int)'