kotlin - получить изображение из массива изображений в папке для рисования - PullRequest
0 голосов
/ 30 октября 2019

Я хочу вернуть свой массив изображений из ресурса, это мой массив, например:

 <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], какой должен быть тип img в DrawerModelкласс? Я пробовал любой, Int, String, но ни один из них не работает

Ответы [ 3 ]

1 голос
/ 30 октября 2019

Это не просто массив int. Вы должны использовать

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

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

И не забудьте позвонить imagesArray.recycle() после его использования.

1 голос
/ 30 октября 2019

В Kotlin вы можете сделать так: -

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

// Вы получите массив Image из ресурса как TypedArray

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

// получите идентификатор ресурса по индексу

imageArray.getResourceId(imageArray.getIndex(0),-1)

// ИЛИ вы можете установить ресурс imageView с идентификатором

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)
 }
1 голос
/ 30 октября 2019

Вы должны использовать TypedArray

TypedArray, определенный в XML. Вы можете использовать это для создания массива других ресурсов, таких как drawables.

Пример:

XML

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

Kotlin

val imageArray = resources.obtainTypedArray(R.array.drawer_icons)
val drawable: Drawable = imageArray.getDrawable(0)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...