Android View ID应该是唯一的吗?

Lit*_*ild 23 android

好吧,我感到困惑的是Android ids是否需要是唯一的.这就是出现混乱的原因:
我们只是说有Activity一个TextView(android:id ="text")和一个Button(android:id ="button").将Button文本视图的文本设置为随机文本.因此,要添加一个监听器,我将检索按钮
Button b = (Button) findViewById(R.id.button),然后添加监听器来执行该任务.
现在,我可以从a ,a 和不具有相同id的内容中引用相同的 TextView DialogFragment,Fragment并且R.id.text毫无疑问,所有更改都将应用于此文本视图.

在子类化的情况下BaseAdapter,如果需要,您需要覆盖getView进行膨胀的位置,如果没有,则进行更改.现在,您Views以几乎相同的方式检索它.几乎.
你做了convertView.findViewById(..).

如果所有视图都需要具有唯一ID,那么如何更改内容ViewgetView不会导致偶然行为?
我的意思是,所有膨胀的视图都具有与布局中定义的相同的ID.

我的理解是,ids在夸大它们的观点的背景下是独特的.由于我是初学者,我要求澄清

艾哈迈德回答后更新

那么,这是什么意思是,我不能膨胀2 FragmentActivity使用相同的布局.这将导致异常.两者都是相同的Activity,因此属于同一个实例.ids会发生冲突

Gus*_*tek 27

文档中您可以阅读

ID在整个树中不一定是唯一的,但它在您正在搜索的树的部分内应该是唯一的(通常可能是整个树,因此最好在可能的情况下完全唯一).

这意味着如果您对所有视图使用相同的ID,则不会有例外,但显然布局将变得无用.

FindViewById只需遍历一棵树,直到它找到具有搜索id的第一个元素并返回它(如果找不到则返回null).如果你在树中有很少的具有相同id的元素你将始终获得相同的元素,即树中第一个元素.

你可能有很多片段用相同的布局充气,就像你有ListView一样,每个元素都有相同的布局,这是因为inflater不关心id值.它只是读取XML文件并创建一个具有正确视图对象的树.