2013-02-16 4 views
3

Android 2.3.3.Соглашение об именах для идентификаторов в Android

У меня есть вопрос относительно именования идентификаторов в Android.

Предположим, у меня есть две кнопки в Activity1 (сохранение и отмена). Я называю их (ID) как btnSave и btnCancel. Теперь у меня есть Activity2, где у меня есть кнопки сохранения и отмены. Оба делают ту же функциональность. Что произойдет, если я укажу идентификаторы как btnSave и btnCancel.

Будет ли я сталкиваться с проблемой при компиляции? Когда я нажимаю, R.id. и ctrl + space, я получу два btnSave и btnCancel (s) на выбор?

И что самое главное, почему я должен называть их по-другому, если нужно?

ответ

4

Если его единственный вопрос, чтобы простым способом для записи в коде, то

вы можете попробовать что-то подобное, (писать название кнопки с любой деятельностью или файл XML макет с префиксом или суффиксом)

button_save_<activity_or_layout_name> 
button_cancel_<activity_or_layout_name> 

Но во время выполнения ваш идентификатор кнопки всегда ссылается на макет. Который вы настроены в свою активность setContentView().

Update:

Пусть в деятельности2 вы используете кнопку с идентификатором компоновки Activity1, то вы можете получить NullPointerException, как ваша кнопка не ссылается в Current деятельности2. (Поскольку ваш Activity2 имеет разный макет).

+0

Спасибо за информацию !!! –

2

На мой взгляд, когда вы называете идентификаторы, вы должны написать имя операции, которая будет использоваться ими сначала, а затем начальная часть виджета и, наконец, что бы это ни значило, например. loginBSave, loginBCancel, activity2BSave, activity2BCancel В любом случае, это полностью зависит от того, как вы программируете, чтобы назвать их так, чтобы вы могли отличить их от друг друга.

0

Для конкретных элементов макета я использую префикс с первыми буквами имени макета. Так что, если у меня есть макет с именем show_task_layout.xml, его элементы будут иметь имя stl_button_ok и т. Д.

Для конкретных элементов, которые могут копироваться или отображаться во многих действиях, я предпочитаю использовать одно имя без префикса. Но если следовать этому пути в каждом макете, будет головная боль для отладки. Если вы не найдете элемент по id

1

Обмен одним и тем же идентификатором между несколькими действиями не имеет никакого значения, и на самом деле вы даже можете иметь одинаковые ID используется много раз в одной и той же деятельности без каких-либо проблем. В этом случае вызов getViewById() будет просто возвращать первый вид, который он найдет, когда в одной иерархии с одним ID будет много просмотров.

Такая ситуация обычно возникает, когда один и тот же макет необходимо многократно раздувать из своего XML-файла. Если вам нужно найти общий доступ к обозревателю одинакового идентификатора, вам необходимо каждый раз изменить идентификатор каждого представления с помощью setId() после каждого поиска или указать другую отправную точку.

Смежные вопросы