我有一个Android应用程序,并非所有元素都有唯一的ID。例如,两个TextView都被称为" itemButton"并在同一屏幕上。我想通过在每个元素上设置标记来为每个元素赋予唯一标识符。
我目前的解决方案是遍历应用程序中的每个元素并为每个元素设置标记。这是一个非常昂贵的解决方案,因为我有很多元素。您知道的另一个属性是否有助于识别除为每个元素设置唯一标记之外的元素?
答案 0 :(得分:0)
我认为你做得不对,你应该通过在每个元素中使用它们来为你的元素分配唯一的id:android:id =“@ + id / YOUR_ID”,然后你可以用findViewById(R。 id.YOUR_ID),所以,如果您有两个文本视图,比方说,用户名和密码,您可以在每个视图上设置ID:
<TextView android:id="@+id/username" .../>
<TextView android:id="@+id/password" .../>
然后你将它们放入你的活动或片段中: TextView txtUsername = findViewById(R.id.username);
TextView txtPassword = findViewById(R.id.password);
答案 1 :(得分:0)
视图ID没有特殊要求它们是唯一的。但是,如果您在单个屏幕上使用非唯一ID,则会遇到困难。
如果使用非唯一ID,您将面临的两个最常见问题是(1)系统无法自动保存视图的实例状态,以及(2)findViewById()
返回&#34;错误& #34;图。
Activity.findViewById()
将在视图层次结构中搜索它找到的具有匹配ID的第一个视图。如果您的层次结构中有两个具有相同ID的视图,则表示您无法使用此方法找到第二个视图。但是,您可以使用View.findViewById()
代替。
View.findViewById()
将从您在上调用方法的视图开始搜索视图层次结构,这意味着您可以区分具有相同ID的两个视图,只要他们有不同的父母。
在您的情况下,我怀疑您可以执行以下操作:
View parentOne = findViewById(R.id.parentOne);
View childOne = parentOne.findViewById(R.id.someIdBeingReused);
View parentTwo = findViewById(R.id.parentTwo);
View childTwo = parentTwo.findViewById(R.id.someIdBeingReused);