我在我的代码中使用了合成属性。但是想知道如何以及何时实际初始化android中的每个视图。
我们只是通过其ID提供导入和访问每个视图。什么时候为视图对象分配内存?
答案 0 :(得分:4)
通过反编译使用Kotlin Android Extensions的Kotlin文件,这很容易进行调查。 (您可以转到Tools -> Kotlin -> Show Kotlin Bytecode
然后在显示的窗格中选择Decompile
来执行此操作。)简而言之,它不是什么神奇的东西,它只使用findViewById
然后强制转换{{1}你的具体类型。
如果您在View
或Activity
中使用它,则会将其缓存在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
次调用的语法糖。