Як отримати ім'я ресурсу з ідентифікатора ресурсу


158


У своєму макеті я визначив щось подібне.

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

Припустимо, що деяка функція в активності повертає мені цей ідентифікатор (id радіо-кнопки). Тепер я хочу отримати цей текст radio1 з цього ідентифікатора. Коротше кажучи, я хочу отримати текст, написаний на радіо1android:id="@+id/radio1"

Хтось може мені сказати, як це можливо?


Це довга історія .. Мені потрібно заповнити дані у велику кількість editText від деяких даних, отриманих від сервера. Тож замість того, щоб вручну встановлювати дані для всіх текстових ящиків, я пишу метод, який міг би працювати для мене .. для цього мені це потрібно.
Code_Life

Відповіді:


363

У своїй діяльності спробуйте такі:

  1. щоб отримати рядок типу radio1:

    getResources().getResourceEntryName(int resid);
  2. щоб отримати рядок типу com.sample.app:id/radio1:

    getResources().getResourceName(int resid);

У Котліні зараз:

val name = v.context.resources.getResourceEntryName(v.id)

4
Дякую, що відповіли на це, я витратив більшу частину години, гуглюючи цю проблему - сайт розробників постійно вказував мені на getString () - що було для цього криваво марним.
Стів

8
Будь-яка ідея, в чому різниця між getResourceEntryName(int resid)і getResourceName(int resid)?
Джошуа Пінтер

10
@JoshPinter в посиланні говорить: getResourceEntryName: Поверніть ім'я входу для даного ідентифікатора ресурсу getResourceName: Поверніть повне ім'я для даного ідентифікатора ресурсу. Ця назва є єдиним рядком форми "пакунок: тип / запис" Різниця тоді, здається, є у доданому пакеті: type для getResourceName
Jose_GD

@Shubhayu - як ти можеш це зробити в тесті еспресо? Функція getResources (), здається, недоступна!
1ak31sha

Я б не рекомендував використовувати його, якщо ви використовуєте Proguard ( minifyEnabled true), особливо дляgetResources().getIdentifier(...
user25

9

У вас є id ("long") з цього ідентифікатора, на який ви хочете отримати доступ до ідентифікатора (ім'я) радіо кнопки, що є radio1 . Ви використовуєте це

getResources().getResourceEntryName(id);

використовуючи вище, ви можете отримати ім'я радіо-кнопки, тобто radio1. тут ідентифікатор параметра, який у вас є (довгий тип) . Спробуйте це допоможе вам на 100%.


2
Дякую. Радий, що хтось насправді відповів на питання замість звичайних відповідей "навіщо вам це потрібно [noob]". Ім'я елемента, поки я повторюю їх, НЕВЕРАЖНО для налагодження. Я маю на увазі, справді, як я можу знайти TextView з id 354814715? (яка, якщо я не помиляюсь, навіть не є постійною між компіляціями) - не впевнений, для чого потрібен ОП, але мені потрібно, щоб перевірити, чи моя функція масштабування шрифту насправді була ітераючою, хоча всі під-елементи.
Стів


1

Якщо я маю рацію, те, що ви хотіли отримати, - це слово "radio1" (від самого ідентифікатора?), Тож якщо це так, то спочатку вам потрібно отримати його ідентифікатор.

int intname= buttonname.getId();

то отримайте його результат

String stringname= getResources().getResourceEntryName(intname);

сподівався, що я допомогла


-1

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

Оскільки ви це визначили, ви повинні знати, що це таке.

Якщо у вас є макет і ви хочете дізнатися, чи має перегляд певний ідентифікатор, ви можете пройти весь макет і перевірити за допомогою getId (), якщо ідентифікатор кожного перегляду - це ідентифікатор, який ви шукаєте ..

Сподіваюся, це допоможе (якщо я зрозумів правильне ваше запитання .. :))


Ні, ти все зрозумів неправильно. Я хочу отримати текст radio1 з Android: id = "@ + id / radio1"
Code_Life

Текстовий радіо1 - це ідентифікатор вашого перегляду. Це не простий текст, який ви можете отримати, розділити тощо. Щоб краще допомогти, чи можете ви сказати нам, для чого саме вам потрібен цей текст?
Димитріс Макрис

@DimitrisMakris: Його довга історія .. Мені потрібно заповнити дані у велику кількість editText від деяких даних, отриманих від сервера. Тож замість того, щоб вручну встановлювати дані для всіх
текстових скриньок

Отже, якщо у вас є відповідь 10, наприклад, рядків, за допомогою яких ви хочете заповнити 10 радіо кнопок, я думаю, що рішенням може бути динамічне створення цих радіо кнопок і встановлення їх значення. Іншим підходом може бути використання ListView з радіо кнопками в якості елементів списку, якщо, звичайно, це відповідає вашим потребам щодо макета.
Димитріс Макрис

Дякуємо за вашу відповідь. Але у вас все неправильно, у мене є 10 editBox, і я отримую як json рядок зі значенням, яке потрібно заповнити в цих 10 редакторах після того, як цей рядок буде проаналізований, він перетворюється на HashMap. Тепер замість того, щоб вручну відобразити кожне значення (відповідне ключу хешмапу) для редагування текстуText. Я пишу метод, який міг би працювати для мене.
Code_Life
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.