2010-01-14 12 views
16

Sólo un polvo rápido,Obtener una matriz de enteros de un recurso XML en el programa Android

que tengo un recurso XML en res/valores/integers.xml

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <integer-array name="UserBases"> 
      <item>2</item> 
      <item>8</item> 
      <item>10</item> 
      <item>16</item> 
    </integer-array> 
</resources> 

y he intentado varias cosas para acceder a ella :

int[] bases = R.array.UserBases; 

esto sólo devuelve int y referencia a UserBases no la matriz misma

int[] bases = Resources.getSystem().getIntArray(R.array.UserBases); 

y esto genera una excepción a mí diciéndome los puntos de referencia R.array.UserBases int para nada

cuál es la mejor manera de acceder a esta matriz, empujarlo en un agradable int-tipo base [] y luego posiblemente vuelva a insertar cualquier modificación en el recurso xml.

He revisado la documentación de Android pero no he encontrado nada terriblemente fructífero.

Respuesta

55

Necesita usar Resources para obtener la matriz int; sin embargo, está utilizando los recursos del sistema, que solo incluyen los recursos estándar de Android (por ejemplo, los accesibles a través del android.R.array.*). Para obtener sus propios recursos, necesita acceder a los Recursos a través de uno de sus Contextos.

Por ejemplo, todas las actividades se contextos, por lo que en una actividad que puede hacer esto:

Resources r = getResources(); 
int[] bases = r.getIntArray(R.array.UserBases); 

Por esta razón, a menudo es útil para pasar alrededor de contexto; lo necesitará para obtener los recursos de su aplicación.

+0

Cool Beans! Muchas gracias. también cuál es la mejor manera de agregar y eliminar elementos de la matriz (excepto editar XML sin procesar), básicamente actualizando cualquier cambio desde el int [] al xml. – JERiv

+0

No estoy seguro de que sea posible actualizar el código xml; todos los recursos xml se compilan en binario cuando compila el apk. Debería hacer una nueva pregunta al respecto, tal vez alguien más lo sepa. –

+3

Daniel tiene razón, no puedes hacer eso. – James

Cuestiones relacionadas