Страница 1 из 1

Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 11:40
trew
Код для разбора:
[syntax=java]TextView textView1 = (TextView)findViewById(R.id.textView22);
TextView textView2 = (TextView)findViewById(R.id.textView23);

Log.d(TAG, "-- textView1 -- " + textView1.getId()); // 213.....21
Log.d(TAG, "-- textView2 -- " + textView2.getId()); // 213....22

textView1.setId(50);
textView2.setId(50);

Log.d(TAG, "-- textView1 -- " + textView1.getId()); // -- 50
Log.d(TAG, "-- textView2 -- " + textView2.getId()); // -- 50

textView1.setText("test 34 34 34");[/syntax]
В итоге значение присвоилось только для textView1. Но мы ведь имеем две View c одинаковым id.
Почему для textView2 не произошло присвоение?

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 12:50
rezak90
потому что такого делать нельзя =)

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 13:00
Foenix
что творят канадцы..

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 13:19
Mikhail_dev
Судя по коду, данный ID не уникальный и я честно говоря не понял нафига он вообще нужен.
[syntax=java5] /**
* Sets the identifier for this view. The identifier does not have to be
* unique in this view's hierarchy. The identifier should be a positive
* number.
*
* @see #NO_ID
* @see #getId()
* @see #findViewById(int)
*
* @param id a number used to identify the view
*
* @attr ref android.R.styleable#View_id
*/
public void setId(int id) {
mID = id;
if (mID == View.NO_ID && mLabelForId != View.NO_ID) {
mID = generateViewId();
}
}[/syntax]

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 13:42
trew
no--
ID - это идентификатор View, поэтому он должен быть уникальный.
К элементам можно обращаться по ID или по наименованию.

rezak90
поэтому я думал получу ошибку или создам группу View-s :)
А ни то и не другое ни получил.

Когда смотрел проекты после обфускации, там было так
TextView textView1 = (TextView)findViewById(2130151515);
т.е. подставляется ID элемента.

Дополенение:
[syntax=java]switch (item.getItemId()) {
case 50:
Intent i = new Intent(this, ThirdActivity.class);
startActivity(i);
break; [/syntax]
Activity запускается для обоих View у которых ID =50.

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 14:02
Mikhail_dev
no--
ID - это идентификатор View, поэтому он должен быть уникальный.
К элементам можно обращаться по ID или по наименованию.
Оооох, читай документацию к методу, я же её скопипастил.
И вообще, когда говорят про ID и про его уникальность, говорят про его область видимости. Где он должен быть по твоему уникальным?

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 14:11
trew
В пределах проекта, по моему. Все ID хранятся в R.java
что происходит после выполнения команды textView1.setId(50) ?
я переопределил значение, в области видимости класса, а в пределах проекта старое значение осталось?
что-то не пойму.

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 14:55
rezak90
зачем view менять id?

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 15:06
trew
rezak90 писал(а):зачем view менять id?
Ну, к примеру нужно открывать меню откуда угодно (много Activity-s), и чем-угодно.
[syntax=java]menu.setHeaderTitle("Заголовок меню");
menu.add(0, 50, 0, "Наименование 0");
menu.add(0, 51, 0, "Наименование 1");
menu.add(0, 52, 0, "Наименование 2");
menu.add(0, 53, 0, "Наименование 3");
menu.add(0, 54, 0, "Наименование 4");
menu.add(0, 55, 0, "Наименование 5");[/syntax]
Я ведь не знаю названий View заранее. Вот и придумал присвоить ID.

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 15:23
Foenix
В данном случае вьюшкам можно присваивать tag, и по нему определять что нужно делать. Удобное свойство.

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 15:35
trew
Foenix писал(а):В данном случае вьюшкам можно присваивать tag, и по нему определять что нужно делать. Удобное свойство.
textView1.getTag(); // результат =50
как теперь запустить контекстное меню для него?

до этого привязывал так: registerForContextMenu(textView1);

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 15:54
Foenix
да нет, я не для этого пример приводила.

А контекстное меню - вообще устарело и не рекомендуется для использования разработчиками. Я им не пользуюсь.

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 15:56
trew
А какой сегодня тренд в моде, на что обратить внимание?

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 15:56
rezak90
есть ещё люди которые юзают контекстное меню? оО

Re: Что такое id для каждого элемента View

Добавлено: 01 ноя 2013, 15:59
rezak90
trew писал(а):А какой сегодня тренд в моде, на что обратить внимание?
последний писк в моде это использовать EditMode (или как его там обзывают) в ActionBar