如何将可绘制文件绑定到变量 - Kotlin
how to bind drawable files to variables - Kotlin
我正在开发一个应用程序,它需要在我的 drawables 文件夹中的 phone 上设置一些壁纸,但我必须分别为每个文件编写代码。这是我的代码:
fun setWallpaper(number:Int) {
val wallpaperManager = WallpaperManager.getInstance(context)
val i: Int = when(number){
0->R.drawable.wp1.toInt()
1->R.drawable.wp2.toInt()
2->R.drawable.wp3.toInt()
3->R.drawable.wp4.toInt()
4->R.drawable.wp5.toInt()
5->R.drawable.wp6.toInt()
6->R.drawable.wp7.toInt()
7->R.drawable.wp8.toInt()
8->R.drawable.wp9.toInt()
9->R.drawable.wp10.toInt()
else->0
}
wallpaperManager.setResource(i)
}
数字变量是我从recyclerview 得到的位置。但这似乎不是一个好方法而且不是动态的,当我有 100 个左右的文件时,我不能为每个文件写一行代码
有没有一种方法可以用来将变量连接到文件名?我该怎么做?
非常感谢
您可以使用listOf
,然后按索引检索。没有理由在每个元素上使用 toInt()
,因为它们已经是 Ints。您可以使用 *
导入 R.drawable
的成员,因此不必重新输入。
import com.mypackage.myapp.R.drawable.*
//...
fun setWallpaper(number: Int) {
val wallpapers = listOf(wp1, wp2, wp3, /* ... */ wp10)
val resource = if (number in wallpapers.indices) wallpapers[number] else 0
WallpaperManager.getInstance(context).setResource(resource)
}
如果你有很多并且有一个一致的命名方案,那么你可以按名称检索。这稍微慢一些,因为它在引擎盖下使用了反射,但是只检索一个元素是微不足道的。
fun setWallpaper(number: Int) {
val resource = context.resources.getIdentifier("wp${number + 1}", "drawable", context.packageName)
WallpaperManager.getInstance(context).setResource(resource)
}
我正在开发一个应用程序,它需要在我的 drawables 文件夹中的 phone 上设置一些壁纸,但我必须分别为每个文件编写代码。这是我的代码:
fun setWallpaper(number:Int) {
val wallpaperManager = WallpaperManager.getInstance(context)
val i: Int = when(number){
0->R.drawable.wp1.toInt()
1->R.drawable.wp2.toInt()
2->R.drawable.wp3.toInt()
3->R.drawable.wp4.toInt()
4->R.drawable.wp5.toInt()
5->R.drawable.wp6.toInt()
6->R.drawable.wp7.toInt()
7->R.drawable.wp8.toInt()
8->R.drawable.wp9.toInt()
9->R.drawable.wp10.toInt()
else->0
}
wallpaperManager.setResource(i)
}
数字变量是我从recyclerview 得到的位置。但这似乎不是一个好方法而且不是动态的,当我有 100 个左右的文件时,我不能为每个文件写一行代码 有没有一种方法可以用来将变量连接到文件名?我该怎么做? 非常感谢
您可以使用listOf
,然后按索引检索。没有理由在每个元素上使用 toInt()
,因为它们已经是 Ints。您可以使用 *
导入 R.drawable
的成员,因此不必重新输入。
import com.mypackage.myapp.R.drawable.*
//...
fun setWallpaper(number: Int) {
val wallpapers = listOf(wp1, wp2, wp3, /* ... */ wp10)
val resource = if (number in wallpapers.indices) wallpapers[number] else 0
WallpaperManager.getInstance(context).setResource(resource)
}
如果你有很多并且有一个一致的命名方案,那么你可以按名称检索。这稍微慢一些,因为它在引擎盖下使用了反射,但是只检索一个元素是微不足道的。
fun setWallpaper(number: Int) {
val resource = context.resources.getIdentifier("wp${number + 1}", "drawable", context.packageName)
WallpaperManager.getInstance(context).setResource(resource)
}