2017-09-08 3 views
0

Ich habe erklärt folgendes declare-stylables in attr.xml:Wie man Integer Resource Array durch Typed-Array erhalten?

<declare-styleable name="SideSpinnerAttrs"> 
    <attr name="stringValues" format="reference" /> 
    <attr name="iconIDs" format="reference"/> 
</declare-styleable> 

Array von Ressourcen Symbolen in array.xml:

<integer-array name="spinnerIcons"> 
    <item>@drawable/ic_attachment_black_24dp</item> 
    <item>@drawable/ic_audiotrack_black_24dp</item> 
    <item>@drawable/ic_slideshow_black_24dp</item> 
</integer-array> 

Ich möchte und diese Symbole von Array ein Set rufen Imageview:

private void readSpinnerIcons(Context context, AttributeSet attrs) { 
    TypedArray icons=context.obtainStyledAttributes(attrs,R.styleable.SideSpinnerAttrs); 

    int id=icons.getResourceId(R.styleable.SideSpinnerAttrs_iconIDs,0); 
    int[] i=getResources().getIntArray(id); 
    spinner_icon.setBackgroundResource(i[0]); 
} 

Aber Array "int [] i" ist leer. Warum?

Antwort

0

Zum Beispiel:

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

können Sie diese verwenden

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

Das Problem ist, diese Zeile:

int id=icons.getResourceId(R.styleable.SideSpinnerAttrs_iconIDs,0); 

Das erste Argument ist nicht die Styleable Ressource-ID, sondern der Index des TypedArray, der die Ressourcen-ID enthält. Da Sie keinen gültigen Index angeben, wird id immer der Standardwert sein, den Sie als 2. Argument verwenden, was bedeutet, dass Ihr int[] Array i immer leer ist.

Stellen Sie außerdem sicher, dass Sie immer recycle() aufrufen, sobald Sie eine TypedArray verwenden. Verwenden Sie Folgendes:

private void readSpinnerIcons(Context context) { 
    TypedArray icons = context.obtainStyledAttributes(new int[] {R.styleable.SideSpinnerAttrs}); 
    int id = icons.getResourceId(0, 0); 
    int[] i = getResources().getIntArray(id); 
    spinner_icon.setBackgroundResource(i[0]); 
    icons.recycle(); 
}