Android: cambio de identificador drawable después de modificar recursos
Tengo una aplicación de Android que utiliza un componente de galería para elegir un icono y asignarlo a un botón.
El conjunto de iconos se encuentra en la carpeta res/drawable
y se accede en la galería con el adaptador típico de la guía:
private Integer[] Imgid = { R.drawable.icon_home, R.drawable.icon_home2, ... }
Después de elegir un ícono, almacené la configuración en un db con id del botón y del dibujable.
Todos los trabajos realizados, pero he notado que si quiero agregar o modificar mi conjunto de iconos o recursos en general de mi aplicación, ids de los recursos de edad podría cambiar, por lo que las preferencias en el db se refiere a icono equivocado.
¿Hay una manera de forzar el viejo ID de la clase R por lo que no cambió en el futuro? ¿O hay otra manera de administrar el elemento de la galera de componentes con otro atributo que id? (Tal vez el nombre de la cadena y la reflexión?)
- Fuentes centrales de imágenes de NinePatch?
- Eclipse / Java - Valores en R.string. * Return int?
- ¿Podemos cargar recursos de cadena de un archivo de recursos que no sea strings.xml en Android?
- Imágenes de fondo libres de derechos para la aplicación Android
- Evitar recursos duplicados en el proyecto android
Gracias por adelantado
- Cambiar el valor de R.string por programa
- Android: ¿Cómo puedo obtener la cadena de los recursos con su nombre?
- Diferentes maneras de obtener un recurso de cadena
- ¿Es posible tener más de un archivo de recursos de cadena en Android?
- Android: obtener un recurso de imagen en Uri: IllegalArgumentException
- Android / Eclipse: ¿cómo puedo agregar una imagen en la carpeta res / drawable?
- ¿Carga la cadena específica de un recurso?
- Android: recupera la matriz de cadenas de los recursos
Puede almacenar el nombre del dibujable en la base de datos si no planea cambiarlo. getResourceEntryName
devuelve el nombre del ID del recurso:
Resources resources = getResources(); String name = resources.getResourceEntryName(R.drawable.icon);
Y puede recuperar el identificador de recursos del nombre con getIdentifier
:
int resId = resources.getIdentifier(name, "drawable", "your.package.name");
No se puede usar int estático para el identificador de recurso, sin embargo, debe buscar dos métodos od Categoría de Resources
:
GetIdentifier ()
GetresourceName ()
No debe confiar en los valores reales de los atributos R.drawable.*
.
Cree sus propios identificadores en su lugar (por ejemplo, 1 corresponde a R.drawable.icon_home
y 2 corresponden a R.drawable.icon_home2
)
Editar:
El nombre de la cadena y la reflexión deberían funcionar también, pero probablemente es un poco excesivo que solo tengas algunos iconos.
- ¿Puedes usar el mismo OnClickListener para diferentes botones?
- Circular personalizada revela resultados de transición en "java.lang.UnsupportedOperationException" cuando se pausan?