Necesito pasar un ID de recurso a un método en una de mis clases. Necesita usar tanto la identificación a la que apunta la referencia como también la cadena. ¿Cómo debería lograr esto mejor?
Por ejemplo:
R.drawable.icon
Necesito obtener la ID entera de esto, pero también necesito acceso a la cadena "icono".
Sería preferible si todo lo que tuviera que pasar al método es la cadena "icono".
Respuestas:
@EboMike: No sabía que
Resources.getIdentifier()
existía.En mis proyectos usé el siguiente código para hacer eso:
Se usaría así para obtener el valor del
R.drawable.icon
valor entero del recursoAcabo de encontrar una publicación de blog que dice que
Resources.getIdentifier()
es más lento que usar la reflexión como lo hice. Compruébelo usted mismo .fuente
getIdentifier()
tiene que hacer dos búsquedas de reflexión. En su ejemplo anterior,getIdentifier()
usaría la reflexión para obtenerDrawable.class
, luego otra búsqueda de reflexión para obtener la ID del recurso. Eso explicaría la diferencia de velocidad. Dicho esto, ninguno de los dos es especialmente rápido y, por lo tanto, realmente debe almacenarse en caché (especialmente si se usa en un bucle o para filas en aListView
). Y el gran problema del enfoque de reflexión es que hace suposiciones sobre los componentes internos de Android que podrían cambiar en alguna versión futura.context
parámetro?Puede usar esta función para obtener la identificación del recurso.
Entonces, si desea obtener una función de llamada extraíble como esta
y para string puedes llamarlo así
Lee esto
fuente
Esto se basa en la respuesta @Macarse.
Use esto para obtener la identificación de recursos de una manera más rápida y amigable con el código.
Ejemplo:
fuente
Cómo obtener una identificación de recurso de aplicación del nombre del recurso es una pregunta bastante común y bien respondida.
La forma de obtener una identificación de recurso de Android nativa a partir del nombre del recurso está menos respondida. Aquí está mi solución para obtener un recurso extraíble de Android por nombre de recurso:
El método se puede modificar para acceder a otros tipos de recursos.
fuente
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ return mContext.getDrawable(resourceId); } else { return mContext.getResources().getDrawable(resourceId); }
Si necesita emparejar una cadena y un int, ¿qué tal un mapa?
fuente
Puede usarlo
Resources.getIdentifier()
, aunque necesita usar el formato para su cadena como lo usa en sus archivos XML, es decirpackage:drawable/icon
.fuente
getResourceEntryName(id)
para buscar el nombre de la cadena. No te metas a buscar el "icono" del texto más largo.Me gustó esto, está funcionando para mí:
fuente
fuente
fuente
getIdentifier
tiene que serid
. Esto ni siquiera se mencionó en el sitio de desarrollo de Android. ¿de dónde sacaste esa información?Como dijiste que solo querías pasar un parámetro y no parecía importar cuál, podrías pasar el identificador de recurso y luego averiguar el nombre de la cadena para ello, por lo tanto:
Esta podría ser la forma más eficiente de obtener ambos valores. No tiene que perder el tiempo buscando solo la parte del "icono" de una cadena más larga.
fuente
En su res / layout / my_image_layout.xml
Para tomar ese ImageView por su valor de ID + +, dentro de su código Java haga esto:
fuente
El enfoque de Kotlin
Uso:
fuente
En MonoDroid / Xamarin.Android puedes hacer:
Pero dado que GetIdentifier no se recomienda en Android, puede usar Reflection de esta manera:
donde sugiero poner un try / catch o verificar las cadenas que está pasando.
fuente
Para obtener la identificación Drawable del nombre del recurso de cadena, estoy usando este código:
fuente