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

时间:2019-10-30 14:53:03

标签: android kotlin android-drawable android-resources

我想从资源返回我的图像数组,例如,这是我的数组:

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

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

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

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

如何从资源返回可绘制数组?


编辑: 我对代码进行了一些更改,又遇到了另一个问题,我需要从这些数组中创建一个数据类,这是我的代码:

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类中的img的类型应该是什么?我尝试了任何Int,String,但都不成功

3 个答案:

答案 0 :(得分:1)

您必须使用TypedArray

  

以XML定义的TypedArray。您可以使用它来创建一个数组   其他资源,例如可绘制对象。

示例:

XML

Z_x = f(xt, yt, dx=1, dy=0)

科特琳

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

答案 1 :(得分:1)

这不仅仅是一个int数组。您应该使用

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

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

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

答案 2 :(得分:1)

在Kotlin中,您可以执行以下操作:-

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

//您将从资源获取的Image数组为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)
 }