2010-11-11 2 views
6

В настоящее время я стараюсь использовать разные идентификаторы для каждого виджета, но если бы я использовал один и тот же идентификатор для некоторых виджетов в разных XML-файлах макета, что бы случилось с моими вызовами findViewById? Будет ли запутанным и вернуть виджет из неправильного файла макета?Что произойдет, если я использую один и тот же идентификатор для нескольких виджетов в разных макетах?

Я спрашиваю, потому что я думал о включении представления (с рядом кнопок) в некоторых других представлениях, тогда каждый из этих экранных классов должен был бы придать каждой кнопке на включенном представлении несколько другое поведение. Но для этого они будут вызывать findViewById на одном и том же идентификаторе. К примеру в настоящее время я, как это в каждом файле:

final ImageButton homeButton = (ImageButton)this.findViewById(R.id.rshome_button); 
homeButton.setOnClickListener(new BottomButtonClickListener()); 

final ImageButton hotButton = (ImageButton)this.findViewById(R.id.rshotlist_button); 
hotButton.setOnClickListener(new BottomButtonClickListener()); 

final ImageButton locButton = (ImageButton)this.findViewById(R.id.rsbot_map); 
locButton.setOnClickListener(new BottomButtonClickListener()); 

final ImageButton sendButton = (ImageButton)this.findViewById(R.id.rssend_button); 
sendButton.setOnClickListener(new BottomButtonClickListener()); 

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

Благодаря

ответ

3

Это должно быть хорошо до тех пор, пока вы не создаете экземпляр как макеты в одной и той же деятельности. Но, не пробовав этого, я не хотел бы этого гарантировать.

Однако, я не удивлюсь, если ошибки генератора кода Android, хотя, как это будет, вероятно, попытается создать два R.id.rshome_button записи в R.java файла.

+1

Итак, как он знает, какой из них мы ищем? – GMsoF

-1

Лучший способ попробовать самостоятельно.

Но вы делаете setContentView (R.layout.your_layout);

Так что, если вы звоните findViewById он будет искать виджет с заданным идентификатором в your_layout

Вот почему вы можете использовать те же идентификаторы в различных макетов.

+0

R.id.view_id - статическое целое, сгенерированное во время компиляции, до запуска setContentView(). – Chloe

8

Да, вы можете использовать те же самые id s в разных макетах. На самом деле, это может быть хорошей практикой.

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