gpt4 book ai didi

android - 重命名布局元素的 ID 不会重命名 viewBinding 引用

转载 作者:行者123 更新时间:2023-12-05 00:04:53 26 4
gpt4 key购买 nike

假设我有一个名为 的布局activity_main.xml 它有一个元素:

<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />

名为 的 Activity MainActivity.java .在它的 onCreate 方法中,我使用 viewBinding 对上面的布局进行膨胀,并设置 TextView 的文本:
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());

binding.textView.setText("some text");
}

现在,如果我在 中重命名 TextView 的 id activity_main.xml , 按 Shift+F6 类似于 @+id/text_view_new ,然后是 onCreate 中的引用从 binding.textView.setText("some text"); 不变至 binding.textViewNew.setText("some text");
这种行为是限制、错误还是我做错了什么 ?

最佳答案

Is this behaviour a limitation, a bug or am I doing something wrong?



我的想法:
  • 你做的一切如预期
  • 我认为这不是错误或限制,而是它的工作方式。当然,有人可能会期待魔术并在 Activity 中将您的“textView”更改为“textViewNew”,有人可能会说这是一个限制。了解 View Binding 的工作原理以及它是否可以发挥这种魔力非常重要。

  • View 绑定(bind)机制生成额外的 Java 绑定(bind)类。所以在构建过程中发生了魔法 - 生成了类 ActivityMainBinding,放置了公共(public)字段“textView”。获得此类的实例后,您可以只编写“binding.textView”。

    但是在xml中重命名“id”之后,自动更改这个自动生成的类并不是很聪明(如果你想用“textViewNew”替换“textView”,则必须执行该操作)。这就是为什么此更改不会影响代码中的任何内容

    关于android - 重命名布局元素的 ID 不会重命名 viewBinding 引用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61639541/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com