自定义控件引起布局文件中的NullPointerException问题

    xiaoxiao2025-09-06  642

    布局中出现NullPointerException图如下: 是什么导致的这种问题呢? 这时候我们会看到可视化编辑器提示: Use View.isInEditMode() in your custom views to skip code when shown in Eclipse 双击错误点会定位到指定代码: 我们只需要加上if(!isInEditMode()){ ///代码块 }或者在代码前加上if (isInEditMode()) { return; }即可解决。 可是isInEditMode又是什么?我们进到view的源码里面去看一下… /** * Indicates whether this View is currently in edit mode. A View is usually * in edit mode when displayed within a developer tool. For instance, if * this View is being drawn by a visual user interface builder, this method * should return true. * * Subclasses should check the return value of this method to provide * different behaviors if their normal behavior might interfere with the * host environment. For instance: the class spawns a thread in its * constructor, the drawing code relies on device-specific features, etc. * * This method is usually checked in the drawing code of custom widgets. * * @return True if this View is in edit mode, false otherwise. */ public boolean isInEditMode() { return false; } 原因为下: 在预览布局的时候 会执行一次你View里的代码来绘制View到布局里,而NullPointerException是由于预览和程序执行的执行性差异造成的,所以整个布局无法预览出来了。 也就是如果在自定义控件的构造函数或者其他绘制相关地方使用系统依赖的代码,会导致可视化编辑器无法报错并提示,上面代码中用了mSrc图片计算宽度,所以导致出错。

    转载请注明原文地址: https://ju.6miu.com/read-1302369.html
    最新回复(0)