我想从资源返回我的图像数组,例如,这是我的数组:
<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,但都不成功
答案 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)
}