android - 重命名布局元素的 ID 不会重命名 viewBinding 引用
问题描述
假设我有一个名为activity_main.xml的布局,它有一个元素:
<TextView
android:id="@+id/text_view"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
一个名为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");
}
现在,如果我在activity_main.xml中重命名 TextView 的 id ,通过按下类似 的Shift+F6
东西@+id/text_view_new
,那么 in 中的引用onCreate
不会从更改binding.textView.setText("some text");
为binding.textViewNew.setText("some text");
这种行为是限制、错误还是我做错了什么?
解决方案
这种行为是限制、错误还是我做错了什么?
我的想法:
- 你按预期做的一切
- 我认为这不是错误或限制,而是它的工作方式。当然,有人可能会期待魔术并在活动中将您的“textView”更改为“textViewNew”,有人可能会说这是一个限制。了解 View Binding 的工作原理以及它是否可以发挥这种魔力非常重要。
视图绑定机制生成额外的 Java 绑定类。所以在构建过程中发生了魔法 - 生成了类 ActivityMainBinding,放置了公共字段“textView”。获得此类的实例后,您可以只编写“binding.textView”。
但是在xml中重命名“id”之后,自动更改这个自动生成的类并不是很聪明(如果你想用“textViewNew”替换“textView”,则必须执行该操作)。这就是为什么此更改不会影响代码中的任何内容
推荐阅读
- django - 禁止保存()以防止由于未保存的相关对象“用户”而导致数据丢失
- javascript - Javascript Map 不包含数字数组作为键
- python - 如何找到两列之间的月份差异并将其保存在新列中?
- python - Teamcity 使用 python 向项目中的所有构建添加新的构建代理
- xml - Powershell - 如何读取 XML 的 EventData 部分
- python - 将字符串拆分为名称和时间
- javascript - 编辑后仅编辑一个字段,而另一个字段出现意外行为(React 挂钩)
- android-recyclerview - 具有多种视图类型的回收器视图逐步教程视频
- reactjs - 如何构建 React js 服务器端 jpx 并在客户端与 php 服务器一起使用?
- python - 在 Python 中可视化结构化的 n 维数据