【问题标题】:Kotlin Synthetic propertiesKotlin 合成属性
【发布时间】:2017-02-10 12:21:08
【问题描述】:

我注意到 Kotlin 合成属性不适用于 CustomViews。我不知道这是不是有意的。在读取生成的 java 类时,我看到缓存存在:

private HashMap _$_findViewCache;

但从未使用过。相反,只要需要视图,就会调用findViewById。这是默认行为吗?合成属性仅适用于活动和片段?

【问题讨论】:

  • _$_findViewCache 字段在ActivityFragment 类中自动生成。您的自定义 View 类中有 _$_findViewCache 吗?
  • 是的。生成代码(地图和缓存功能在那里)。但是通过综合访问属性被翻译成 findViewById 字节码(我通过“Kotlin Bytecode”选项看到它)
  • 如果它是一个错误,这有点关键。特别是在执行动画的视图中,其中 findViewbyId 被调用了很多次。如果您需要任何额外信息,请告诉我
  • @yanex 这应该是默认行为还是我错过了什么?
  • 我很快就会对此进行调查。

标签: android kotlin kotlin-android-extensions


【解决方案1】:

This works now. Blog post on kotlin-android-extensions

自定义类应生成缓存并使用它:

itemTitle.text = "Hello World!"

这在自定义视图类中,变为:

((TextView)this._$_findCachedViewById(id.itemTitle)).setText((CharSequence)"Hello World!");

正确使用缓存

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-08-25
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多