如何将可绘制文件绑定到变量 - 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)
}