kotlin - 从可绘制文件夹中的图像数组获取图像

kotlin - get image from image array in drawable folder

我想 return 来自资源的图像数组,例如这是我的数组:

 <integer-array name="drawer_icons">
    <item>@drawable/drawer_home</item>
</integer-array>

我通过以下代码获取数组:

val imagesArray =resources.getIntArray(R.array.drawer_icons)

问题是,在上面的代码之后,imagesArray 的值为 0

如何从资源中 return 可绘制数组?


编辑: 我对我的代码做了一些更改,我遇到了另一个问题,我需要从这些数组中生成一个数据 class,这是我的代码:

data class DrawerModel(var title:String, var img: Any)

val titlesArray=resources.getStringArray(R.array.drawer_titles)
    val imagesArray =resources.obtainTypedArray(R.array.drawer_icons)

    val list= ArrayList<DrawerModel>()
    for (i in titlesArray.indices){
        val model=DrawerModel(titlesArray[i],imagesArray[i])
        list.add(model)
    }

我在 imagesArray[i] 上出错,DrawerModel class 中的 img 类型应该是什么?我试过任何 , Int , String 但没有一个有效

你必须使用TypedArray

A TypedArray defined in XML. You can use this to create an array of other resources, such as drawables.

示例:

XML

<integer-array name="drawer_icons">
    <item>@drawable/drawer_home</item>
</integer-array>

科特林

val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
val drawable: Drawable = imageArray.getDrawable(0)

这不仅仅是一个整型数组。你应该使用

val imagesArray = resources.obtainTypedArray(R.array.drawer_icons)

val icon = imagesArray.getResourceId(position, -1)

并且不要忘记在使用后调用 imagesArray.recycle()

在 Kotlin 中,您可以这样做:-

 <integer-array name="drawer_icons">
    <item>@drawable/drawer_home</item>
</integer-array>

// 你将从资源中获取图像数组作为 TypedArray

 val imageArray = resources.obtainTypedArray(R.array.drawer_icons)

//通过索引获取资源ID

imageArray.getResourceId(imageArray.getIndex(0),-1)

// 或者你可以将 imageView 的资源设置为 id

imageView.setImageResource(imageArray.getResourceId(imageArray.getIndex(0),-1))

// 最后回收数组

imageArray.recycle()

对于您扩展的问题,解决方案是:-

 data class DrawerModel(var title:String, var img: Int)

 val titlesArray=resources.getStringArray(R.array. drawer_titles)
 val imagesArray =resources.obtainTypedArray(R.array. drawer_icons)

 val list= ArrayList<DrawerModel>()
 for (i in titlesArray.indices){
      val model=DrawerModel(titlesArray[i],imagesArray.getResourceId(imagesArray.getIndex(i),-1))
      list.add(model)
 }