Что произойдет, если я использую один и тот же идентификатор для нескольких виджетов в разных макетах? - PullRequest
6 голосов
/ 11 ноября 2010

В настоящее время я стараюсь использовать разные идентификаторы для каждого виджета, но если бы я использовал один и тот же идентификатор для некоторых виджетов в разных 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 в каждом файле, чтобы он указывал на виджет в каждом связанном макете. было бы хорошо, если бы я мог использовать один R.id для всех, чтобы мне не приходилось настраивать каждый файл макета и каждый класс экрана.

Спасибо

Ответы [ 3 ]

8 голосов
/ 11 ноября 2010

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

3 голосов
/ 11 ноября 2010

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

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

0 голосов
/ 11 ноября 2010

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

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

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

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

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