Это довольно простой вопрос. Позвольте мне привести пример. У меня два занятия

  • activity_a.xml

  • ActivityA.java

  • activity_b.xml

  • ActivityB.java

Оба файла XML содержат только TextView для отображения простого текста. Как обычно, на TextView будут ссылаться в соответствующих файлах .java, используя их View id.

У меня вопрос: правильно ли ссылаться на TextView в обоих файлах XML с одинаковым идентификатором? (например, используя приведенный ниже код с точно таким же идентификатором для activity_a.xml и activity_b.xml)

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content">
  <TextView
  android:id="@+id/textview"
  android:layout_width="match_parent"
  android:layout_height="wrap_content" />
</LinearLayout>

Я практиковал эту процедуру без проблем. При попытке получить соответствующий xml-код для TextView с помощью Ctrl + Click (в Windows) мне предоставляется два варианта (для отображения xml-кода TextView из activity_a.xml или из activity_b.xml ).

Кроме того, как рекомендуется назвать представление в Android? Это будет полезно, если ваш проект Android содержит несколько файлов макета.

-5
Traveller 10 Май 2016 в 05:19

4 ответа

Лучший ответ

Правильно ли ссылаться на TextView в обоих файлах XML с одинаковым идентификатором?

Это совершенно нормально, компилятор будет смотреть только на идентификатор в иерархии одного представления.

Например: findViewById(R.id.textview) внутри ActivityA.java будет искать только идентификатор текстового просмотра внутри activity_a.xml (при условии, что у вас есть setContentView(R.layout.activity_a); заранее.

как рекомендуется назвать представление в Android?

На мой взгляд, вам просто нужно быть последовательным в названии своего представления во всем приложении. Основная цель - избежать неправильного толкования и путаницы.

Надеюсь, это поможет!

0
Jonathan Darryl 10 Май 2016 в 02:27

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

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

https://github.com/ribot/android-guidelines/blob/master/project_and_code_guidelines.md

Или вы можете дать имя как activity_home_tvUserName, если текстовое имя пользователя просматривается из домашней активности и activity_profile_tvUserName, если текстовое имя пользователя просматривается из активности профиля.

1
Nrup Parikh 10 Май 2016 в 02:35

Они занимаются разными видами деятельности, поэтому у вас не должно возникнуть проблем с использованием одного и того же идентификатора. вы можете объявить их оба как @+id/textview. Однако почему бы просто не использовать один и тот же XML-файл для обоих действий? Нет причин, по которым ты не можешь. Вы также можете создать файл ids.xml в папке значений и объявить в нем все свои идентификаторы, поэтому вам не нужно объявлять их в своих макетах, но это не очень распространенный подход.

0
Ali 10 Май 2016 в 02:27

Правильно ли ссылаться на TextView в обоих файлах XML с одинаковым идентификатором?

Мой ответ: Да, это правильно .

Всякий раз, когда мы устанавливаем setContentView(R.layout.activity_a), он будет искать данный идентификатор в вышеуказанном действии. Локальный атрибут с таким же идентификатором будет иметь большее предпочтение по сравнению с другими атрибутами с тем же идентификатором.

Но лучше всего иметь уникальный идентификатор.

0
Mr.7 10 Май 2016 в 02:36