2010-12-14 6 views
3

Ich habe einen Integer-Array in einer XML-Datei alsLaden Integer Array von xml

<integer-array name="myArray"> 
    <item>@drawable/pic1</item> 
    <item>@drawable/pic2</item> 
    <item>@drawable/pic3</item> 
    <item>@drawable/pic4</item> 
</integer-array> 

Im Code folgt, Ich versuche, diese Anordnung zu laden

int[] picArray = getResources().getIntArray(R.array.myArray); 

Das erwartete Ergebnis ist

R.drawable.pic1, R.drawable.pic2,R.drawable.pic3 

aber stattdessen kommt es mit einem Array mit allen Werten als Null

Kann mir jemand sagen, was los ist?

+1

haben Sie versucht, nur ganze Zahlen zu setzen ?! – Tima

+0

Mein Xml wie folgt. Der Java-Code GetResources(). GetIntArray (R.array.myArray) gibt falsches Ergebnis während GetResources(). GetStringArray (R.array.myWord) ist korrektes Ergebnis Word1 word2 \t @ ziehbar/pic1 \t @ ziehbar/pic2 \t @ ziehbar/pic3 GSree

Antwort

2

Sie müssen ein Array mit IDs Ihrer Bilder erhalten. Wahrscheinlich hilft this article Ihnen. Und so ist der Code, den Sie wahrscheinlich brauchen:

int[] picArray = new int[4]; 

for (int i = 1; i <=4; i++) 
{ 
    try 
    { 
    Class res = R.drawable.class; 
    Field field = res.getField("pic"+i); 
    picArray[i-1] = field.getInt(null); 
    } 
    catch (Exception e) 
    { 
    Log.e("MyTag", "Failure to get drawable id.", e); 
    } 
} 
+0

Ich kann sehen, Reflexion Klassen werden hier verwendet. Ist das der einzige Weg? Gibt es eine Möglichkeit, getResources.getIntArray arbeiten zu lassen? – GSree

2

Es sieht so aus, als ob Sie über typisierte Arrays sprechen könnten?

wenn so eine typisierte Array sollte wie folgt aussehen:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <array name="icons"> 
     <item>@drawable/home</item> 
     <item>@drawable/settings</item> 
     <item>@drawable/logout</item> 
    </array> 
    <array name="colors"> 
     <item>#FFFF0000</item> 
     <item>#FF00FF00</item> 
     <item>#FF0000FF</item> 
    </array> 
</resources> 

Können Sie zeigen uns Ihre tatsächliche xml-Datei, so können wir Ihnen helfen?

EDIT: Ja, das sind keine ganzen Zahlen. Machen Sie es zu einem Ressourcen-Array, wenn Sie Ressourcen speichern möchten.

+0

My Xml wie folgt. Der Java-Code GetResources(). GetIntArray (R.array.myArray) gibt falsches Ergebnis während GetResources(). GetStringArray (R.array.myWord) ist korrektes Ergebnis Word1 word2 \t @ drückbar/pic1 \t @ ziehbar/pic2 \t @ ziehbar/pic3 GSree

+0

Ich bin immer noch unklar, was Sie tun, wird Ihr zweites Beispiel korrekte Ergebnisse liefern, weil Sie bekommen ein String-Array, das ist, was es erwartet, aber Ihr Integer-Array in Xml hat keine Ganzzahlen in ihm hat es Ressourcenpfade. Ich denke, Sie sollten sich Mur Votema's Antwort ansehen. scheint zu sein, was Sie vielleicht versuchen würden. –

+0

Ich habe die Liste unter resources.xml. Versucht, Array statt Integer-Array zu verwenden. Wie lade ich dieses Array-Objekt? Ich habe getResources(). GetIntArray (R.array.newarrayname) und immer noch das gleiche Ergebnis (d. H. Und Array von Nullen). Ich dachte @ drawable/home wird als int gespeichert! – GSree

11

diesen solution Gefunden:

TypedArray ar = context.getResources().obtainTypedArray(R.array.myArray); 
int len = ar.length(); 

int[] picArray = new int[len]; 

for (int i = 0; i < len; i++) 
    picArray[i] = ar.getResourceId(i, 0); 

ar.recycle(); 

// Do stuff with resolved reference array, resIds[]... 
for (int i = 0; i < len; i++) 
    Log.v (TAG, "Res Id " + i + " is " + Integer.toHexString(picArray[i])); 

und Ressourcen XML-Datei sein könnte:

<resources> 
    <integer-array name="myArray"> 
     <item>@drawable/pic1</item> 
     <item>@drawable/pic2</item> 
     <item>@drawable/pic3</item> 
     <item>@drawable/pic4</item> 
    </integer-array> 
</resources> 
+0

funktioniert gut ..... – MBH

+0

Großartig .. Danke .. !! – Bhavana

1

Sie es einfach ein Array normale Ressource machen. Man könnte es wie folgt tun:

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <array name="icons"> 
     <item>@drawable/home</item> 
     <item>@drawable/settings</item> 
     <item>@drawable/logout</item> 
    </array> 
</resources> 

Dann machen Sie nicht ein int [] nur TypedArray wie diese machen:

TypedArray icons = getResources().obtainTypedArray(R.array.icons); 

und bekommen es mit:

imageview.setImageDrawable(mIcons.getDrawable(position));