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

kotlin - How synthetic property initialise view?

我在我的 code.But 中使用了合成 属性 想知道它如何以及何时实际初始化 android 中的每个视图。

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

这很容易通过反编译您使用 Kotlin Android 扩展的 Kotlin 文件进行调查。 (您可以通过转到 Tools -> Kotlin -> Show Kotlin Bytecode 然后在出现的窗格中选择 Decompile 来完成此操作。)简而言之,它没有什么神奇的,它只是使用 findViewById 然后投射 View 给你的具体类型。

如果您在 ActivityFragment 中使用它,它们会缓存在 Map 中,这样查找只会发生一次。之后,您只需支付以 ID 为键获取地图条目的费用。


您也可以在 ViewGroup 上使用它来查找其中具有给定 ID 的 child,在这些情况下,没有缓存,这些调用被简单的 [=14= 取代] 每次到达该行时都会发生的调用。第二个语法看起来像这样:

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

它会在字节码中转换成类似这样的东西:

View view = inflater.inflate(...);
Button btnLogin = (Button) view.findViewById(R.id.btnLogin);
btnLogin.setText("Login");

请注意,实际的 View 实例仍会在您的布局膨胀时创建。 Kotlin Android 扩展只是 findViewById 调用的语法糖。