当有.xml文件的多个副本时,LayoutInflater如何处理ID?

时间:2016-03-17 17:27:38

标签: java android xml layout-inflater

为了使我的观点更容易解释,我将使用一个例子:

<EditText
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:id="@+id/thisIdIsVeryCool"/>

这是我要膨胀的.xml,我将其称为sublayout.xml

现在假设我在main_layout.xml中对sublayout.xml进行了三次充气。

它没有出现任何错误,所以我在我的设备上运行应用程序。 现在,就在我的眼前,有3个EditText,其中thisIdIsVeryCool为id。 这对我没有意义......

如果我想检查thisIdIsVeryCool是否为空,如果这些EditText中的2个确实为空,但其中一个不是?

好吧,好像我从来没有尝试过像这样编写代码而且我很懒,但相信我,我已经尝试过了。 实际上,我尝试了一个稍微不同的东西,看起来,当我在.java中引用thisIdIsVeryCool时,它只会影响首先创建的膨胀的sublayout.xml。

所以...如何称为其他EditText?

总的来说:

LayoutInflater如何处理ID?

1 个答案:

答案 0 :(得分:0)

  

实际上,我尝试了一个稍微不同的东西,似乎在.java中我引用thisIdIsVeryCool时,它只会影响首先创建的膨胀的sublayout.xml。

我不确定所描述的行为是否可靠。如果有多种可能性,我会对你在哪个地方以及如何调用findViewById()进行任何假设。如果有多种可能性,我不会做出任何假设。

  

如何称为其他EditText?

有时,当你给它们充气时,你会抓住它们。

或者,根据您对它们的影响,您可以通过父母区分它们。

当您致电findViewById()以检索小部件时, 作业是确保您通过View调用的findViewById()的组合获得唯一结果{1}}以及您提供的ID作为参数。

  

LayoutInflater如何处理ID?

它将android:id值分配给它创建的小部件,就像在布局资源中定义它们一样。否则,它会忽略它们。

  

这对我没有意义......

小工具ID不保证是唯一的。实际上,它们通常不是唯一的,例如ListViewRecyclerView中的行。

这与id属性在HTML中的工作方式没有显着差异。它不像HTML页面有点无效,浏览器会拒绝渲染它,只是因为你有两个标签具有相同的id。现在,如果因为你有多个具有相同id的标签,那么在尝试使用JavaScript操作DOM时会遇到问题,这是你的错,而不是浏览器,而不是Tim Berners爵士 - 李,或其他任何人。 Android中也存在同样的事情:android:id属性可以帮助您找到小部件。您可以使用布局资源,窗口小部件ID和findViewById()使用有效的模式。