2010-01-14 10 views
16

solo una sveltina,ottenere un array intero da una risorsa XML in programma Android

Ho una risorsa xml in res/valori/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> 

e Ive ha provato diverse cose per accedervi :

int[] bases = R.array.UserBases; 

questo solo restituisce e int riferimento UserBases non l'array

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

e questo genera un'eccezione verso di me mi dice i punti di R.array.UserBases int riferimento a nulla

qual è il modo migliore per accedere a questo array, spingerla in una bella base di tipo int [] e quindi eventualmente reinserire eventuali modifiche nella risorsa xml.

Ho controllato la documentazione di Android ma non ho trovato nulla di terribilmente fruttuoso.

risposta

55

È necessario utilizzare le risorse per ottenere l'array int; tuttavia stai utilizzando le risorse di sistema, che includono solo le risorse Android standard (ad es. quelle accessibili tramite android.R.array.*). Per ottenere le proprie risorse, è necessario accedere alle risorse tramite uno dei tuoi contesti.

Per esempio, tutte le attività sono Contesti, quindi in un'attività che si può fare questo:

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

Questo è il motivo per cui è spesso utile per passare intorno al contesto; ne avrai bisogno per ottenere le risorse della tua applicazione.

+0

Cool Beans! Molte grazie. anche quello che è il modo migliore per aggiungere e rimuovere elementi dall'array (salvare la modifica di xml raw) - essenzialmente aggiornando eventuali modifiche dall'int [] all'xml. – JERiv

+0

Non sono sicuro che sia possibile aggiornare xml dal codice; tutte le risorse xml sono compilate in binario quando si crea l'apk. Dovresti fare una nuova domanda al riguardo, forse qualcun altro lo sa. –

+3

Daniel ha ragione, non puoi farlo. – James

Problemi correlati