我如何访问我的字符串数组资源在我的数据源类中的项目?



我正在尝试创建一个使用字符串作为键并保存StringArrays作为值的Map。我正在我的Datasource类中创建这个映射。

我想要用作键的字符串在Strings .xml中声明,如下所示:

<string-array name="races">
<item>Archfiend</item>
<item>Asrai</item>
<item>Blinkbeast</item>
<item>Crogoblin</item>
<item>Demonaga</item>
<item>Dragonborn</item>
<item>Dwarf</item>
<item>Elf</item>
<item>Fairy</item>
<item>Gnome</item>
<item>Grey</item>
<item>Half-Dragon</item>
<item>Half-Elf</item>
<item>Half-Orc</item>
<item>Half-Troll</item>
<item>Halfling</item>
<item>Haud</item>
<item>Human</item>
<item>Kodama</item>
<item>Loralai</item>
<item>Nekojin</item>
<item>Parasite</item>
<item>Satyr</item>
<item>Slime</item>
<item>Tiefling</item>
</string-array>

,作为一个例子,我想映射字符串" archfriend "到字符串数组"archfiend_subrace .">

<string-array name="archfiend_subraces">
<item>Aerial</item>
<item>None</item>
</string-array>

我的数据源类如下所示:

package com.example.anime5echaractersheet.data
import android.content.res.Resources
import com.example.anime5echaractersheet.R
class Datasource {
private val raceList: Array<String> = Resources.getStringArray(R.array.races)
val subraceMap: Map<String, Int> = mapOf(
raceList[0] to R.array.archfiend_subraces
)
}

我无法使用getStringArray(),我不知道为什么.

我也尝试使用getResources()而不是Resources,但这对我来说似乎也不可用。提前感谢您的协助。

您必须从Context实例中检索Resources的实例。你不能只用类的名字来调用它的函数。所以你的DataSource类在它的构造函数中需要一个ContextResources参数。然而,我建议不要使用字符串资源作为键,因为如果你的应用程序有字符串的翻译,而用户改变了他们的语言设置,它会破坏你的应用程序。

我建议在json文件中定义所有类型和子类型列表,使用唯一键而不是文字值。那么你不需要做所有这些硬编码手册"wiring"资源的共享。如果您想添加或删除某个种族,它将使从单个Json文件编辑内容变得更加容易。例如:

{
"races" : [
"archfiend" {
"subraces" : [ "ariel", "none" ]
},
"asrai",
...
]
}

然后代替string-array资源,使用普通的string资源,使用json中的键作为它们的名称。

<string name="archfiend">Archfiend</string>
<string name="ariel">Ariel</string>
<string name="none">None</string>
<string name="asrai">Asrai</string>

在运行时,您可以使用这个辅助函数来检索实际的字符串:

fun Context.resourceKeyToString(key: String): String =
resources.getString(resources.getIdentifier(key, "string", packageName))

这离题了。你可以查看在Android中使用Json的教程。

相关内容

最新更新