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

Tay*_*har 5 android rename android-viewbinding

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

<TextView
    android:id="@+id/text_view"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content" />
Run Code Online (Sandbox Code Playgroud)

名为MainActivity.java 的活动。在其 onCreate 方法中,我使用 viewBinding 膨胀上述布局,并设置文本视图的文本:

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    ActivityMainBinding binding = ActivityMainBinding.inflate(getLayoutInflater());
    setContentView(binding.getRoot());

    binding.textView.setText("some text");
}
Run Code Online (Sandbox Code Playgroud)

现在,如果我通过按 类似的方式重命名Activity_main.xml中 TextView 的 id ,那么 中的引用不会从 更改为Shift+F6@+id/text_view_newonCreatebinding.textView.setText("some text");binding.textViewNew.setText("some text");

这种行为是限制、错误还是我做错了什么

ser*_*nov 1

这种行为是限制、错误还是我做错了什么?

我的想法是:

  • 你所做的一切都如预期
  • 我认为这不是错误或限制,这只是它的工作原理。当然,有人可能会期待魔法并在活动中将您的“textView”更改为“textViewNew”,有人可能会说这是一个限制。了解视图绑定的工作原理以及它是否能发挥如此神奇的作用非常重要。

视图绑定机制生成额外的 Java 绑定类。所以在构建过程中神奇的事情发生了——生成了 ActivityMainBinding 类,并放置了公共字段“textView”。获得此类的实例后,您可以只编写“binding.textView”。

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