Каков наилучший способ объявить набор ничьих (Kotlin)? - PullRequest
0 голосов
/ 27 января 2020

У меня много векторных иконок в виде XML ресурсов для рисования (точнее 96). Я отображаю их в 8 категориях. В настоящее время я объявил их следующим образом:

private val categoryA = arrayListOf(R.drawable.a1, ... R.drawable.an)
private val categoryB = arrayListOf(R.drawable.b1, ... R.drawable.bn)
***
private val categoryH = arrayListOf(R.drawable.h1, ... R.drawable.hn)

Все работает хорошо и быстро, но я не уверен, что это хороший способ для реального приложения. Я также использую Room DB для других целей в приложении, поэтому я должен добавить новую таблицу и заполнить DB при первом запуске? Также легко, по крайней мере, прямо сейчас, добавлять / удалять иконки позже ... Но, с другой стороны, код выглядит не очень хорошо (для меня) с таким количеством R.drawable.id строк.

1 Ответ

0 голосов
/ 27 января 2020

Напишите функцию, которая может получить ваши рисуемые Ints по отражению:

fun getDrawableIdByName(name: String) = try {
    R.drawable::class.java.getField(name).getInt(null)
} catch (e: NoSuchFieldException) {
    error("No drawable with name $name")
}

Затем вы можете построить свои списки с помощью этого:

val categoryLists = ('a'..'h')
    .map { category ->
        List(12) { index ->
            getDrawableIdByName("$category${index + 1}")
        }
    }

Я полагаю, вы можете написать это в свой база данных после первого запуска, но я думаю, что это излишне только для 96 предметов.

...