Как получить имя ресурса из идентификатора ресурса


114


В моем макете я определил что-то вроде этого.

<RadioButton 
android:id="@+id/radio1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Dnt want this text" /> 

Предположим, что некоторая функция в действии возвращает мне этот id (id of radioButton). Теперь я хочу получить этот текст radio1 с этого id. Короче говоря, я хочу, чтобы получить текст Radio1 написанного в android:id="@+id/radio1"

Может кто-нибудь сказать мне, как это возможно?

  0

Свым длинный рассказ .. мне нужно заселенным данным в большое ЧИСЛО EditText от некоторых данных, полученных от сервера. Поэтому вместо того, чтобы вручную устанавливать данные во все текстовые поля, я пишу метод, который мог бы работать для меня .. для этого мне это нужно. 13 апр. 122012-04-13 08:53:14

259

в вашей деятельности, попробуйте это:

  1. , чтобы получить строку, как radio1:

    getResources().getResourceEntryName(int resid); 
    
  2. , чтобы получить строку, как com.sample.app:id/radio1:

    getResources().getResourceName(int resid); 
    
+3

Спасибо, что ответили на это, я потратил большую часть часа на поиски этой проблемы - сайт dev постоянно указывал мне на getString(), который был беспросветным для этого. 05 сен. 122012-09-05 12:03:51

+8

Любая идея, какая разница между 'getResourceEntryName (int resid)' и 'getResourceName (int resid)'? 22 янв. 142014-01-22 17:10:48

+9

@JoshPinter Ссылка говорит: ** getResourceEntryName: ** Возвращает имя записи для заданного идентификатора ресурса ** getResourceName: ** Возвращает полное имя для данного идентификатора ресурса. Это имя является одной строкой формы «package: type/entry» Разница тогда кажется в добавленном * пакете: type * for ** getResourceName ** 22 мар. 142014-03-22 01:26:29

  0

@Shubhayu - как вы можете сделать это в эспрессо контрольная работа? Функция getResources(), похоже, недоступна! 05 окт. 162016-10-05 17:07:07


0

Вы имеете в виду, что хотите взять строковый текст идентификатора?

Поскольку вы определили его, вы должны знать, что это такое.

Если у вас есть макет, и вы хотите найти, имеет ли представление определенный идентификатор, вы можете пройти весь макет и проверить с помощью getId(), если идентификатор каждого вида - это идентификатор, который вы ищете.

Надеется, что это помогает (если я понимаю, исправить свой вопрос .. :))

  0

Нет, у тебя все не так. Я хочу получить текст ** radio1 ** из ** android: id = "@ + id/radio1" ** 13 апр. 122012-04-13 08:50:01

  0

Текстовое радио1 - это идентификатор вашего представления. Это не простой текст, который вы можете получить, разделить и т. Д. Чтобы лучше помочь вам, можете ли вы рассказать нам, для чего именно вам нужен этот текст? 13 апр. 122012-04-13 08:52:58

  0

@ DimitrisMakris: Это долгая история. Мне нужно заполнить данные в большом нет editText из некоторых данных, полученных с сервера. Поэтому вместо того, чтобы вручную устанавливать данные во все текстовые поля, я пишу метод, который мог бы работать для меня .. для этого мне нужно это 13 апр. 122012-04-13 08:53:55

  0

Итак, если у вас есть ответ из 10 строк, в которых вы хотите заполнить 10 радиоблок, я что решение может состоять в том, чтобы динамически создавать эти радиообъекты и устанавливать их ценность. Другим подходом может быть использование ListView с радиообменами в качестве элементов списка, если, конечно, это соответствует вашим потребностям в макете. 13 апр. 122012-04-13 08:57:23

  0

Спасибо за ваш ответ. Но у меня все получилось неправильно. У меня есть 10 editBox, и я получаю как строку json со значением, которое должно быть заполнено в этих 10 editbox после того, как эта строка является parserd, она преобразуется в HashMap. Теперь вместо этого вручную сопоставляем каждое значение (соответствующее ключу hashmap) для редактирования текста текста. Я пишу метод, который мог бы работать для меня. 13 апр. 122012-04-13 09:03:43

  0

Скажите мне, если у вас есть хорошее решение для этого. 13 апр. 122012-04-13 09:06:26


8

Вы идентификатор ('длинный' тип) из этого идентификатора вы хотите получить доступ к кнопке радио ID (имя) что радио1. Вы можете использовать этот

getResources().getResourceEntryName(id); 

при помощи выше, вы можете получить имя радио кнопки т.е. FM1,. здесь параметр id - это у вас есть (длинный тип). Попробуйте это, это поможет вам на 100%.

+1

Спасибо. Рад, что кто-то действительно ответил на вопрос вместо обычного «зачем вам нужны ответы [noob]». Наличие имени элемента во время итерации через них НЕВОЗМОЖНО для отладки. Я имею в виду, действительно, как мне найти TextView с id 354814715? (что, если я не ошибаюсь, даже не является постоянным между компиляциями) - не знаю, зачем OP это нужно, но мне нужно было это, чтобы проверить, что моя функция масштабирования шрифтов фактически выполняет итерацию, хотя все подэлементы. 05 сен. 122012-09-05 12:01:23


0

Если я прав, что вы хотите извлечь слово «Radio1» (от самого? Ид), так что если это так, то сначала вам нужно получить его идентификатор

int intname= buttonname.getId(); 

затем получить результат это

String stringname= get regetResources().getResourceEntryName(intname); 

надеялось, что я помог