在其中使用字符串项在string.xml中查找字符串数组名称-android

时间:2019-05-06 04:42:55

标签: android arrays string

我有一个要求,我需要使用其中的项目来查找数组名称。听起来令人困惑!

我的数组如下。

<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 个答案:

答案 0 :(得分:2)

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