gpt4 book ai didi

android - 重复 +id 布局范围的可能用例是什么?

转载 作者:行者123 更新时间:2023-12-04 17:53:28 25 4
gpt4 key购买 nike

我们没有编译问题,我们只是想扩展我们的知识。通读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 的布局范围的项目,它就不会编译。 现在,我们了解到标识符在该 View 的层次结构中不必是唯一的,但是,我们不了解此行为的用处。

有人知道非唯一标识符有用的用例吗?

当我们在设置项目 CAF 中看到 Android for MSM ( this code ) 时,我们产生了这种疑问。具有重复的 ID (@+id/fields):

       <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>

最佳答案

想到的用例是如果您的布局在另一个布局中包含两次或更多次,那么您将拥有重复的 ID。这将使您免去尝试在每个重复布局中获取唯一 ID 的麻烦。

它还允许您使用相同的代码在每个包含的布局中工作,而不必根据您正在处理的子布局跟踪不同的 ID。

关于android - 重复 +id 布局范围的可能用例是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42411661/

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