Найти имя строкового массива в strings.xml, используя строковый элемент в нем - android - PullRequest
0 голосов
/ 06 мая 2019

У меня есть требование, в котором мне нужно найти имя массива, используя элемент, присутствующий в нем.Звучит странно!

У меня есть массив, как показано ниже.

<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>

Я получаю строку в качестве аргумента метода, как показано ниже

getParentArray(String value){
//Consider the value received is "Five" and the output should be the array name which is numbers_content
//here I need the help in knowing how to do it.
}

Как написать методполучить имя массива?

1 Ответ

2 голосов
/ 06 мая 2019

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...