我有一个要求,我需要使用其中的项目来查找数组名称。听起来令人困惑!
我的数组如下。
<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.
}
如何编写一种获取数组名称的方法?
答案 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