Je souhaite stocker l'ID des ressources pouvant être extraites sous la forme de R.drawable.*
à l'intérieur d'un tableau à l'aide d'un fichier de valeurs XML, puis récupérez le tableau dans mon activité.
Des idées sur la façon de réaliser cela?
Vous utilisez un tableau typé dans arrays.xml
fichier dans votre /res/values
dossier qui ressemble à ceci:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<integer-array name="random_imgs">
<item>@drawable/car_01</item>
<item>@drawable/balloon_random_02</item>
<item>@drawable/dog_03</item>
</integer-array>
</resources>
Ensuite, dans votre activité, accédez-y comme suit:
TypedArray imgs = getResources().obtainTypedArray(R.array.random_imgs);
// get resource ID by index
imgs.getResourceId(i, -1)
// or set you ImageView's resource to the id
mImgView1.setImageResource(imgs.getResourceId(i, -1));
// recycle the array
imgs.recycle();
Dans le dossier value
, créez le fichier xml
nommé arrays.xml
y ajouter les données de cette façon
<integer-array name="your_array_name">
<item>@drawable/1</item>
<item>@drawable/2</item>
<item>@drawable/3</item>
<item>@drawable/4</item>
</integer-array>
Puis l'obtenir à votre code de cette façon
private TypedArray img;
img = getResources().obtainTypedArray(R.array.your_array_name);
Utilisez ensuite le code suivant: Drawable
dans le img
TypedArray
, par exemple ImageView
background
ImageView.setBackgroundResource(img.getResourceId(index, defaultValue));
où index
est l'index Drawable
. defaultValue
est une valeur que vous donnez s'il n'y a pas d'élément à ce index
Pour plus d'informations sur TypedArray
visitez ce lien http://developer.Android.com/reference/Android/content/res/TypedArray.html
Vous pouvez l’utiliser pour créer un tableau d’autres ressources, telles que drawables. Notez qu'il n'est pas nécessaire que le tableau soit homogène. Vous pouvez donc créer un tableau de types de ressources mixtes, mais vous devez savoir quels types de données se trouvent dans le tableau et à quel endroit.
<?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>
Et obtenez les ressources dans votre activité comme ceci
Resources res = getResources();
TypedArray icons = res.obtainTypedArray(R.array.icons);
Drawable drawable = icons.getDrawable(0);
TypedArray colors = res.obtainTypedArray(R.array.colors);
int color = colors.getColor(0,0);
Prendre plaisir!!!!!
façon kotlin pourrait être ceci:
fun Int.resDrawableArray(context: Context, index: Int, block: (drawableResId: Int) -> Unit) {
val array = context.resources.obtainTypedArray(this)
block(array.getResourceId(index, -1))
array.recycle()
}
R.array.random_imgs.resDrawableArray(context, 0) {
mImgView1.setImageResource(it)
}