kotlin - 合成属性如何初始化视图?

时间:2017-07-13 07:21:42

标签: android kotlin kotlin-android-extensions

我在我的代码中使用了合成属性。但是想知道如何以及何时实际初始化android中的每个视图。

我们只是通过其ID提供导入和访问每个视图。什么时候为视图对象分配内存?

1 个答案:

答案 0 :(得分:4)

通过反编译使用Kotlin Android Extensions的Kotlin文件,这很容易进行调查。 (您可以转到Tools -> Kotlin -> Show Kotlin Bytecode然后在显示的窗格中选择Decompile来执行此操作。)简而言之,它不是什么神奇的东西,它只使用findViewById然后强制转换{{1}你的具体类型。

如果您在ViewActivity中使用它,则会将其缓存在Fragment中,以便查询只发生一次。之后,您只需支付按ID获取地图条目的费用。

您也可以在Map上使用它来查找具有给定ID的孩子,在这些情况下,没有缓存,这些调用将被简单的ViewGroup调用取代到达那条线的时间。第二种语法如下所示:

findViewById

它将在字节码中转换为与此类似的东西:

val view = inflater.inflate(...)
view.btnLogin.text = "Login"

请注意,当布局膨胀时,仍会创建实际的View view = inflater.inflate(...); Button btnLogin = (Button) view.findViewById(R.id.btnLogin); btnLogin.setText("Login"); 实例。 Kotlin Android Extensions只是View次调用的语法糖。