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)
}
我想 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)
}