Android Studio停止生成我的布局预览。问题是由于存在自定义视图。
错误:
渲染问题
java.lang.NullPointerException 在
com.my.app.views.bars.TopBar$mainViewModel$2.invoke(TopBar. kt:26) at com.my.app.views.bars.TopBar$mainViewModel$2.invoke(TopBar. kt:25) at * layoutlib *. * internal *. kotlin. SynchronizedLazyImpl. getValue(LazyJVM. kt:74)
除了这个预览问题,应用程序工作正常。
我重新构建了项目并使缓存无效,但这并没有解决问题。
- 编辑:**我找到问题了,来自下面一行,有道理!(findViewTreeViewModelStoreOwner()!!)
private val mainViewModel by lazy {
ViewModelProvider(findViewTreeViewModelStoreOwner()!!).get<MainViewModel>()
}
类似的职位:
Kotlin delegate property causes a preview rendering error in Android Studio
Custom View does not render in Design View in Android Studio?
2条答案
按热度按时间shstlldc1#
你面对NPE是因为当你的自定义视图处于编辑模式时(当它在预览中呈现时),没有合适的视图树所有者,你会得到
null
。你可以使用isInEditMode()来检查:public boolean isInEditMode()**
指示此视图当前是否处于编辑模式。在开发人员工具中显示时,视图通常处于编辑模式。例如,如果此视图由可视化用户界面生成器绘制,则此方法应返回true。如果子类的正常行为可能会干扰宿主环境,则应检查此方法的返回值以提供不同的行为。例如:类在其构造函数中生成一个线程,绘图代码依赖于特定于设备的特性,等等。通常在自定义小部件的绘图代码中检查此方法。
scyqe7ek2#
Marcin Orlowski的答案实际上是有效的,但我发现了一个更短的方法,即: