AFAIK, нет встроенного метода для вашего требования.Итак, я создал простое решение.
Я создал ArrayStorage
класс
class ArrayStorage(private val context: Context) {
private val storage = mutableMapOf<Int, Array<String>>()
fun add(arrayName: Int) {
val arr = context.resources.getStringArray(arrayName)
storage[arrayName] = arr
}
fun getArrayName(value: String): String? {
var storageArrayName: String? = null
for (arr in storage) {
for (item in arr.value) {
if (item == value) {
storageArrayName = context.resources.getResourceEntryName(arr.key)
break
}
}
if (storageArrayName != null) {
break
}
}
return storageArrayName
}
}
Метод add
добавляет элементы в хранилище, а getArrayName
Метод может быть использован для поиска имени массива содержащего массива.Если элемент не найден, будет возвращено null
.
Пример
Данные
<string-array name="numbers_content">
<item>One</item>
<item>Two</item>
<item>Three</item>
<item>Four</item>
<item>Five</item>
<item>Six</item>
<item>Seven</item>
<item>Eight</item>
<item>Nine</item>
<item>Ten</item>
<item>Twenty</item>
<item>Thirty</item>
<item>Forty</item>
<item>Fifty</item>
<item>Sixty</item>
<item>Seventy</item>
<item>Eighty</item>
<item>Ninety</item>
<item>Hundred</item>
<item>Two Hundred</item>
<item>Three Hundred</item>
<item>Four Hundred</item>
<item>Five Hundred</item>
<item>One Thousand</item>
<item>One Lakh</item>
<item>One Crore</item>
</string-array>
<string-array name="name_content">
<item>Jake Wharton</item>
<item>John Doe</item>
<item>James Albert</item>
</string-array>
Использование
val arrayStorage = ArrayStorage(this)
arrayStorage.add(R.array.numbers_content)
arrayStorage.add(R.array.name_content)
Log.d("TAG", "ArrayName = ${ arrayStorage.getArrayName("Five") }")
Вывод
ArrayName = numbers_content
ПРИМЕЧАНИЕ:
Если вы хотите вернуть идентификатор массива (Int), а не имя массива (String),замените
context.resources.getResourceEntryName(arr.key)
на arr.key