1

我知道如何使用该View.isInEditMode方法。

我不完全明白什么时候应该使用它。也就是说,我应该防止在 EditMode 中运行什么。

在一些明显的情况下,自定义视图会执行各种疯狂的操作,例如数据库访问、网络、线程等。很明显,您应该在 EditMode 中避免使用它们。

我创建了几个不执行上述任何操作的自定义视图。它们只使用常规的绘图 API,或加载资源,例如可绘制对象。

在设备上运行时,它们看起来完全符合预期,但在布局设计器内部,它们要么看起来不像应有的那样,要么由于一些神秘的异常(通常NullPointerException)而无法渲染。

那么,EditMode 对这些 API 有什么限制吗?

4

1 回答 1

2

自定义视图应该可以正常工作,只要它们只调用视图框架的一部分,而不是任何应用程序代码。无论如何,这对于视图来说是一个很好的分离:它们应该包含视图状态,而不是应用程序逻辑。

通常,如果您的自定义视图尝试从其构造函数(或测量或绘制方法)访问类,例如这些调用尝试访问应用程序框架代码(例如 FragmentManager),则您只需使用 View#isInEditMode。在这种情况下,您可以使用 View#isInEditMode 跳过这些调用。

在不了解更多信息的情况下,很难说更多关于您所看到的问题是什么。特别是,您看到的 NullPointerException 到底是什么(完整的堆栈跟踪)。

它也可能是一个 layoutlib 错误。尝试将渲染版本(在渲染工具栏中)切换到不同的版本。

于 2015-02-24T15:10:22.997 回答