Cómo obtener el nombre del recurso de la identificación del recurso

158


En mi diseño, he definido algo como esto.

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

Suponga que alguna función en la actividad me devuelve este id (id de radioButton). Ahora quiero obtener este texto radio1 de esta identificación. En resumen, quiero recuperar el texto radio1 escrito enandroid:id="@+id/radio1"

¿Alguien puede decirme cómo es posible?

Code_Life
fuente
Es una larga historia ... Necesito completar datos en un gran número de editText de algunos datos recibidos del servidor. Entonces, en lugar de configurar manualmente los datos en todos los cuadros de texto, estoy escribiendo un método que podría funcionar para mí ... para eso necesito esto.
Code_Life

Respuestas:

363

En tu Actividad, prueba estos:

  1. para obtener una cadena como radio1:

    getResources().getResourceEntryName(int resid);
  2. para obtener una cadena como com.sample.app:id/radio1:

    getResources().getResourceName(int resid);

En Kotlin ahora:

val name = v.context.resources.getResourceEntryName(v.id)
Shubhayu
fuente
44
Gracias por responder esto, pasé la mayor parte de una hora buscando en Google este problema, el sitio de desarrollo seguía apuntándome a getString (), lo que fue inútil para esto.
Steve
8
¿Alguna idea de cuál es la diferencia entre getResourceEntryName(int resid)y getResourceName(int resid)?
Joshua Pinter
10
@JoshPinter la referencia dice: getResourceEntryName: devuelve el nombre de la entrada para un identificador de recurso dado getResourceName: devuelve el nombre completo de un identificador de recurso dado. Este nombre es una sola cadena de la forma "paquete: Tipo / entrada" La diferencia, entonces parece ser agregado en el paquete: Tipo de getResourceName
Jose_GD
@Shubhayu: ¿cómo podrías hacer esto en una prueba de espresso? ¡La función getResources () no parece estar disponible!
1ak31sha
Yo no recomendaría el uso que si utiliza Proguard ( minifyEnabled true), especialmente paragetResources().getIdentifier(...
USER25
9

Tiene una identificación (tipo 'largo') de esa identificación a la que desea acceder la identificación del botón de radio (nombre) que es radio1 . Usas esto

getResources().getResourceEntryName(id);

en el uso anterior puede obtener el nombre del botón de radio, es decir, radio1. aquí la identificación del parámetro es la que tiene (tipo largo) . Prueba esto, te ayudará al 100%.

Anil Jadhav
fuente
2
Gracias. Me alegra que alguien haya respondido la pregunta en lugar de las respuestas habituales de "¿por qué necesitas esa respuesta?". Tener el nombre del elemento mientras estoy iterando a través de ellos es INVALUABLE para la depuración. Quiero decir, realmente, ¿cómo voy a encontrar TextView con el ID 354814715? (que si no me equivoco, ni siquiera es constante entre las compilaciones): no estoy seguro de por qué el OP lo necesitaba, pero lo necesitaba para verificar que mi función de escala de fuente en realidad estaba iterando a través de todos los subelementos.
Steve
2

Kotlin:

val name = v.context.resources.getResourceEntryName(v.id)
Anand Makwana
fuente
2
Tal vez pueda agregar más información sobre qué problema resuelve esto y cómo lo hace :)
Philipp Meissner
@PhilippMeissner todo es obvio
Jemshit Iskenderov
Acordemos estar en desacuerdo.
Philipp Meissner
1

Si estoy en lo cierto, lo que querías recuperar es la palabra "radio1" (¿de la propia identificación?), Así que si ese es el caso, primero debes obtener su identificación.

int intname= buttonname.getId();

luego obtenga el resultado

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

esperaba haber ayudado

Fahad Maqsood Qazi
fuente
-1

¿Quieres decir que quieres tomar el texto de cadena de la identificación?

Como lo ha definido, debe saber qué es esto.

Si tiene un diseño y desea saber si una Vista tiene una identificación específica, puede recorrer todo el diseño y verificar con getId (), si la identificación de cada Vista es la identificación que está buscando.

Espero que esto ayude (si tengo entendido corrige tu pregunta ... :))

Dimitris Makris
fuente
No, lo entendiste todo mal. Quiero recuperar el texto radio1 de android: id = "@ + id / radio1"
Code_Life
Texto radio1 ES la identificación de su Vista. No es un texto simple que puede obtener, dividir, etc. Para poder ayudarlo mejor, ¿puede decirnos para qué necesita exactamente este texto?
Dimitris Makris
@DimitrisMakris: Es una larga historia ... Necesito completar los datos en un gran número de editText de algunos datos recibidos del servidor. Entonces, en lugar de configurar manualmente los datos en todos los cuadros de texto, estoy escribiendo un método que podría funcionar para mí ... para eso necesito esto
Code_Life
Entonces, si tiene una respuesta de 10, por ejemplo, cadenas con las que desea llenar 10 botones de radio, creo que una solución podría ser crear dinámicamente estos botones de radio y establecer su valor. Otro enfoque podría ser usar un ListView con botones de radio como elementos de la lista, si por supuesto esto se ajusta a sus necesidades con respecto al diseño.
Dimitris Makris
Gracias por tu respuesta. Pero lo entendiste todo mal, tengo 10 editBox y recibo como cadena json con el valor que se debe completar en estas 10 cajas de edición después de que esta cadena se analiza y se convierte en HashMap. Ahora, en cambio, asigne manualmente cada valor (correspondiente a la clave del hashmap) para editar el texto del texto ... Estoy escribiendo un método que podría funcionar para mí.
Code_Life