Cómo evitar que algunos valores en R.java cambien al agregar/actualizar recursos

Necesito almacenar el enlace a la imagen, que el usuario ha elegido. Las fuentes de las imágenes son archivos, íconos de contacto y elementos de diseño de recursos (necesito elementos de diseño ya que proporciono diferentes imágenes para diferentes resoluciones/densidades). Con el propósito de unificarlo, lo almaceno en URI y, en consecuencia, este URI puede estar apuntando a un presentar (file://), a proveedor de contenido o para Recursos (android.resource://...). Así es como se ve el URI que apunta a dibujable con id=2130837534:

android.resource://my.packagename/2130837534

Funciona bien a menos que las identificaciones en R.java se regeneran. Entonces, ¿hay alguna forma de evitar que SDK cambie algunos de los R.java valores de ID?

preguntado el 22 de mayo de 12 a las 18:05

Deberías estar almacenando el nombre del recurso Por ejemplo, icon.png no cambiará, pero su ID de recurso muy bien podría hacerlo. Siempre puedes usar Resources.getIdentifier(String name, String defType, String defPackage) para obtener la identificación del recurso real del nombre del recurso. -

Puede confiar en un truco, las identificaciones de recursos se generan en orden alfabético dentro de su categoría, así que utilícelas. Una respuesta tan horrible. -

3 Respuestas

No, no puedes, y no debes. Si puede describir su problema claramente, podría haber alguna otra solución.

Guarde sus nombres de recursos en un archivo, de esta manera.

icono_perfil_1 icono_perfil_2

Y luego, cuando necesite la identificación del recurso, haga esto.

int resID = getResources().getIdentifier("icon_profile_1", "drawable","your_package_name");

Haz click aquí (java.lang.String, java.lang.String, java.lang.String)

Respondido el 09 de enero de 13 a las 10:01

¿No está claro? Ok, agregaré un ejemplo de Uri. Por cierto, ¿por qué "no debería"? - a.ch.

Me refiero a su caso de uso. ¿Por qué no puede mantener ID de recursos en lugar de Uris? kumar bibek

Como me refiero a los ID fuera del código (por ejemplo, almacenarlos en un archivo), sería lo mismo mantener solo un ID o un ID + precediendo android.resource://my.packagename/ cuerda - a.ch.

Bien, puede almacenar los nombres de los recursos y luego volver a convertirlos en ID en tiempo de ejecución. ¿Eso ayudaría? - kumar bibek

Hm, eso parece razonable. ¿Podría, por favor, actualizar su respuesta con esta sugerencia para que otros queden más claros por qué la acepto? - a.ch.

Como R.java se genera automáticamente, no se puede restringir su funcionamiento, ya que volverá a generarse automáticamente cuando su proyecto se limpie o compile.

contestado el 22 de mayo de 12 a las 18:05

Esto es imposible en Android porque R.java está autogenerado y no puedes hacer nada al respecto.

contestado el 22 de mayo de 12 a las 18:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.