2011-07-13 7 views
10

Tengo una aplicación de Android que usa un componente de galería para elegir un icono y asignarlo a un botón.
El conjunto de iconos se encuentra en res/drawable carpeta y se accede en la galería con el adaptador típico de la guía:Android: cambio de id dibujable después de modificar recursos

private Integer[] Imgid = { 
    R.drawable.icon_home, 
    R.drawable.icon_home2, 
    ... 
} 

Después de un icono de la elección, i almacenan la configuración en una base de datos con id del botón y del el dibujable
Todo funciona, pero he notado que si quiero agregar o modificar mi conjunto de iconos o los recursos en general de mi aplicación, los identificadores del recurso anterior podrían cambiar, por lo que las preferencias en el archivo db se refieren al icono incorrecto.
¿Hay alguna manera de forzar la identificación anterior de la clase R para que no cambien en el futuro? ¿O hay otra forma de administrar el elemento de la galera componente con otro atributo que id? (Tal vez el nombre de cadena y la reflexión?)

Gracias de antemano

Respuesta

0

Usted no debe confiar en los valores reales de los R.drawable.* atributos.
crear sus propios identificadores de lugar (por ejemplo, 1 corresponden a R.drawable.icon_home y 2 corresponden a R.drawable.icon_home2)

Editar:
nombre y la reflexión de cadena deben trabajar también, pero es probable que sea un poco exagerado usted tiene sólo unos pocos iconos .

12

Puede almacenar el nombre del dibujable en el base de datos si no planea cambiar eso. getResourceEntryName devuelve el nombre del ID de recurso:

Resources resources = getResources(); 
String name = resources.getResourceEntryName(R.drawable.icon); 

y se puede recuperar el ID de recurso del nombre con getIdentifier:

int resId = resources.getIdentifier(name, "drawable", "your.package.name"); 
+0

eso es que los chicos respuesta correcta. android cambia los identificadores del archivo r de forma dinámica. si desea una entrada estática, use el nombre del recurso tal como lo indica kriz. el ID no es estático y no hay forma de hacerlo estático. – masi

Cuestiones relacionadas