Является ли Android View id уникальным?

Хорошо, поэтому я смущен тем, что Android-идентификаторы должны быть уникальными или нет. Вот почему возникает путаница:
Давайте просто скажем, что есть Activity который имеет TextView (android: id = "text") и Button (android: id = "button"). Button устанавливает текст текстового представления в случайный текст. Итак, чтобы добавить слушателя, я заберу кнопку как
Button b = (Button) findViewById(R.id.button) а затем добавьте слушателя для выполнения задачи.
Теперь я могу ссылаться на тот же TextView из DialogFragment , Fragment и то, что не с тем же идентификатором R.id.text и все изменения будут применены к этому текстовому представлению без сомнений.

В случае подкласса BaseAdapter вам необходимо переопределить getView где вы при необходимости будете раздувать, а если нет, вы вносите изменения. Теперь вы просматриваете Views почти так же. Почти.
Вы делаете convertView.findViewById(..) .

Если все представления должны иметь уникальный идентификатор, как изменение содержимого View в getView не приводит к случайному поведению?
Я имею в виду, что все просмотренные представления имеют тот же идентификатор, что и в макете.

Я понимаю, что идентификаторы уникальны в контексте представления, которое их накачивало. Поскольку я новичок, я прошу разъяснений

Обновление после ответа Ахмада

Итак, это означает, что я не могу раздуть два Fragment в Activity , используя тот же макет. Это приведет к исключению. Оба завышены одной и той же Activity , поэтому принадлежат к одному и тому же экземпляру. Идентификаторы конфликтуют

Solutions Collecting From Web of "Является ли Android View id уникальным?"

В документации Вы можете прочитать

Идентификатор не обязательно должен быть уникальным по всему дереву, но он должен быть уникальным в той части дерева, которое вы ищете (что часто может быть целым деревом, поэтому лучше всего быть совершенно уникальным, когда это возможно).

Это означает, что исключений не будет, если вы используете одинаковый идентификатор для всех своих просмотров, но, очевидно, макет будет бесполезен.

FindViewById работает просто путем перемещения дерева до тех пор, пока не найдет первый элемент с искомым идентификатором и не вернет его (или null, если не найдет). Если у вас было несколько элементов с одним и тем же идентификатором в дереве, вы всегда получите тот же самый элемент, который является первым в дереве.

У вас может быть много фрагментов, завышенных с одинаковой компоновкой, так же, как у вас есть ListView, причем каждый элемент имеет тот же макет, потому что надуватель не заботится о значениях id. Он просто читает XML-файл и больше не создает дерево с правильными объектами просмотра.

Почему вы используете android:id="text" ? Вы должны использовать android:id="@+id/text" или android:id="@id/text" зависимости от того, каким способом вы выберете. Кроме того, getView относится к позиции позиции при прокрутке или нет ListView

Вы делаете convertView.findViewById (..).

Если все представления должны иметь уникальный идентификатор, как изменение содержимого View в getView не приводит к случайному поведению?

Это связано с тем, что вы создаете экземпляр представления, раздувая его. В этом случае идентификаторы должны быть уникальными. В противном случае вы, вероятно, получите ClassCastException (если два разных типа представления имеют один и тот же идентификатор).

Было бы невозможно поддерживать ListView где каждая строка должна иметь уникальные идентификаторы для всех своих представлений.

Итак, это означает, что я не могу раздуть два фрагмента в Activity, используя тот же макет. Это приведет к исключению. Оба завышены одной и той же Деятельностью, поэтому принадлежат к одному и тому же экземпляру. Идентификаторы будут

Нет, фрагменты работают по-другому. Вы должны вернуть завышенный вид в onCreateView() . Таким образом, каждый фрагмент должен раздувать представление, что приводит к наличию двух отдельных объектов вида.