我们没有编译问题,我们只想扩展我们的知识。通过Google Code Documentation阅读,我们已经读到+ id不必是布局范围内唯一的。
编译示例下方:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.bq.testviewids.MainActivity">
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!" />
<TextView
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hola Mundo" />
</LinearLayout>
private void initViews() {
txtText = (TextView) findViewById(R.id.text);
txtText.setId(View.generateViewId());
txtText = (TextView) findViewById(R.id.text);
}
private void changeTextView() {
txtText.setText("");
}
如果在 initViews()中,我们没有最后两行:
txtText.setId(View.generateViewId());
txtText = (TextView) findViewById(R.id.text);
当我们对txtText进行更改时(在 changeTextView()中),第一个TextView会被修改。
如果我们确实有最后两行,则第二个TextView会被修改。
我们不知道这是可能的,我们认为如果你有两个布局范围内具有相同+ id的项目,它将无法编译。 现在,我们了解标识符在此视图的层次结构中不必是唯一的 ,但是,我们不了解此行为的用处。
有人知道非唯一标识符有用的用例吗?
当我们在设置项目CAF中的 Android for MSM (this code)中看到重复ID(< EM> @ + ID /字段):
<LinearLayout android:id="@+id/fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_section"
android:visibility="gone">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item">
...
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_item">
...
</LinearLayout>
<LinearLayout android:id="@+id/fields"
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/wifi_section" >
...
</LinearLayout>
答案 0 :(得分:0)
想到的用例是如果您的布局在另一个布局中包含两次或更多次,您将拥有的重复ID。它可以帮助您避免在每个重复的布局中尝试获取唯一ID的麻烦。
它还允许您使用相同的代码在每个包含的布局中工作,而不必根据您正在处理的子布局跟踪不同的ID。