当前位置: 首页 > 知识库问答 >
问题:

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

巫马盛
2023-03-14

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

我们只提供导入和访问每个视图的ID。何时为视图对象分配内存?

共有1个答案

白子明
2023-03-14

通过反编译使用Kotlin Android扩展的Kotlin文件,可以很容易地对此进行研究。(您可以转到tools->kotlin->Show Kotlin bytecode,然后在出现的窗格中选择compile)简而言之,这没什么神奇的,它只是使用findviewbyid,然后将视图转换为具体类型。

如果在活动片段中使用它,这些代码将缓存映射中,以便查找只发生一次。之后,您只需支付通过ID作为键获取地图条目的费用。

您还可以在viewgroup上使用它来查找其中包含给定ID的子级,在这种情况下,没有缓存,这些调用被每次到达该行时都会发生的简单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只是findviewbyid调用的语法糖。

 类似资料:
  • 但是我得到错误“在初始化之前使用属性”这是有道理的,因为我只声明。但是我不知道我应该如何或为了什么初始化输入,因为值是输入

  • 问题内容: 我想从属性文件中的init我的ORB(通常我初始化它像这样,在运行我的例子: ) 我写了一个简单的代码: 然后尝试初始化我的球体: 但是有一些错误: 我的config.properties文件: 我做错了什么? 通常,当我初始化我的ORB时,一切都很好,所以它不是代码问题,而是文件初始化的问题。 问题答案: 您还必须添加到ORB参数。将其与您通常使用的命令行进行比较。所有参数都必须传递

  • 我在想,是否可以使用对< code>this关键字的引用来初始化一个(引用类型)属性(当它的值为< code>null),而不使用构造函数。< br >在某些情况下,我不想使用构造函数来初始化属性,因此,如果没有人访问它,它的值将不会被创建。< br >此外,如果可能的话,我不喜欢在构造函数中将属性声明与其初始化分开。 一个典型的例子是MVVM模式编程的命令声明: 我不喜欢写三倍的成员的名字… 我

  • 我正在开发一个Struts2 Spring Hibernate webapp,我需要在检索一个对象或该对象的集合后初始化一个惰性集合。 用例 我有一个团队模型,其关系被热切地加载为员工(我认为这显然是一个集合)。反过来,员工模型有一个懒惰的关系注册表,我只需要一些特定的操作,所以我根本不需要急切地加载它。 现在。我调用我的(用Spring注入到我的Struts2控制器中),以便检索一个特定的已经加

  • 问题内容: 我希望图片移到底部。如果按按钮,图片应向下移动1。 我添加了图片和一个按钮: 至少我在函数“ fahren”中说过将图片向下移动1。 所以我的问题是:这些corX和corY东西会出现一些错误。没有它们,它会完美地工作,但比起一次性按钮就好。错误是:ViewController.Type没有名为corX的成员,而ViewController.Type没有名为panzer的成员。 PS:我

  • 我的插件注册了一个扩展和一些从继承的自定义任务。