为了使我的观点更容易解释,我将使用一个例子:
<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?
答案 0 :(得分:0)
实际上,我尝试了一个稍微不同的东西,似乎在.java中我引用thisIdIsVeryCool时,它只会影响首先创建的膨胀的sublayout.xml。
我不确定所描述的行为是否可靠。如果有多种可能性,我会对你在哪个地方以及如何调用findViewById()
进行任何假设。如果有多种可能性,我不会做出任何假设。
如何称为其他EditText?
有时,当你给它们充气时,你会抓住它们。
或者,根据您对它们的影响,您可以通过父母区分它们。
当您致电findViewById()
以检索小部件时, 作业是确保您通过View
调用的findViewById()
的组合获得唯一结果{1}}以及您提供的ID作为参数。
LayoutInflater如何处理ID?
它将android:id
值分配给它创建的小部件,就像在布局资源中定义它们一样。否则,它会忽略它们。
这对我没有意义......
小工具ID不保证是唯一的。实际上,它们通常不是唯一的,例如ListView
或RecyclerView
中的行。
这与id
属性在HTML中的工作方式没有显着差异。它不像HTML页面有点无效,浏览器会拒绝渲染它,只是因为你有两个标签具有相同的id
。现在,如果因为你有多个具有相同id
的标签,那么在尝试使用JavaScript操作DOM时会遇到问题,这是你的错,而不是浏览器,而不是Tim Berners爵士 - 李,或其他任何人。 Android中也存在同样的事情:android:id
属性可以帮助您找到小部件。您可以使用布局资源,窗口小部件ID和findViewById()
使用有效的模式。