【发布时间】:2013-08-05 20:47:04
【问题描述】:
好吧,我很困惑的是 Android id 是否需要是唯一的。这就是产生混淆的原因:
假设有一个Activity 有一个TextView (android:id="text") 和一个Button (android:id="button")。 Button 将文本视图的文本设置为随机文本。因此,要添加监听器,我将检索 按钮为Button b = (Button) findViewById(R.id.button),然后添加监听器来完成任务。
现在,我可以从DialogFragment、Fragment 和具有相同 ID 的 R.id.text 引用这个 same TextView,毫无疑问,所有更改都将应用于此文本视图.
在子类化BaseAdapter 的情况下,您需要覆盖getView,如果有必要,您可以在其中进行膨胀,如果没有,则进行更改。现在,您以几乎相同的方式检索Views。差不多。
你做一个convertView.findViewById(..)。
如果所有视图都需要有一个唯一的id,那么在getView 中更改View 的内容如何不会导致随意的行为?
我的意思是,所有膨胀的视图都具有与布局中定义的相同的 id。
我的理解是,在夸大它们的视图的上下文中,id 是独一无二的。由于我是初学者,我要求澄清
艾哈迈德回答后更新
所以,这意味着我不能使用相同的布局在Activity 中膨胀两个Fragment。这将导致异常。两者都被同一个Activity 膨胀,因此属于同一个实例。 id会冲突
【问题讨论】:
-
不会抛出异常。对于 Android 来说,检查是否有冲突的 id 太昂贵了。唯一的问题是,如果您使用
findViewById()搜索视图,您可能会收到带有该 ID 的 any 视图。因此,只要 id 在您正在搜索的视图的子树中是唯一的,就可以了。 -
@AlexMDC 是的,完全正确。你澄清了。如果 id 相同,我会取回任何视图。 :)
-
“id 在膨胀它们的视图的上下文中是唯一的”。你的意思是,如果你想避免 ID 冲突,它们在被调用
findViewById()方法的 Activity 或 View 的上下文中应该是唯一的?
标签: android