使用动态数组时如何切换到strings.xml?

时间:2019-04-17 21:34:47

标签: android kotlin

我想切换到strings.xml以允许多种语言。 我知道如何从strings.xml加载字符串数组,对于简单的数组来说这不是问题,但是我的大多数数组都不简单!整个想法是将它们蜘蛛化。

fun pick( list :Array<String>):String{
    return list.random()
}

fun colour():String {
    val list = arrayOf("blue","red","green",size()+"")
    return pick(list)
}

fun size():String {
    val list = arrayOf("big","small","medium")
    return pick(list)
}

上面是一个简单的例子 size函数可以从strings.xml正常工作,但是单击颜色函数时,不能动态选择颜色函数作为数组的一部分

全部通过pick()的原因是允许我向字符串添加修饰符(更改颜色,计算函数被调用的次数等)

我实际代码中的某些数组(目前为c#)具有10或20个动态条目

那么我们如何为此使用strings.xml?有没有一种方法可以添加关键字,然后可以在pick()中更改...。尽管如此,pick本质上是在调用自身?

我已经坚持了好几天,也许我错过了明显的东西?

编辑

尝试使用关键字,但会导致堆栈溢出,示例代码:

fun keyword(input:String):String{
    val result = input.replace(
        "#colour", colour()
    ).replace(
        "#size", size()
    )
    return result
}

fun pick( list :Array<String>):String{
    val tempResult = list.random()
    val result= keyword(tempResult)
    return result
}

fun colour():String {
    val list = arrayOf("blue","red","green","#size blue")
    return pick(list)
}

fun size():String {
    val list = arrayOf("big","small","medium")
    return pick(list)
}

fun example():String{
    val list = arrayOf("#size #colour whale")
    return pick(list)
}

这被称为     val结果= example() (从本质上讲,调用是异步完成的,因此,如果数组变大,它们将不会挂断程序,无需使用关键字进行测试即可正常工作)

错误是:

  

2019-04-17 22:48:41.433 9010-9665 / com.mrgreaper2004.dmslittlehelper   W / System.err:java.lang.StackOverflowError:堆栈大小1041KB   2019-04-17 22:48:41.436 9010-9665 / com.mrgreaper2004.dmslittlehelper   W / System.err:在java.util.Random.next(Random.java:202)2019-04-17   22:48:41.436 9010-9665 / com.mrgreaper2004.dmslittlehelper W / System.err:   在java.util.Random.nextInt(Random.java:390)2019-04-17 22:48:41.436   9010-9665 / com.mrgreaper2004.dmslittlehelper W / System.err:在   kotlin.random.AbstractPlatformRandom.nextInt(PlatformRandom.kt:45)   2019-04-17 22:48:41.436 9010-9665 / com.mrgreaper2004.dmslittlehelper   W / System.err:位于   kotlin.random.Random $ Default.nextInt(Random.kt:246)2019-04-17   22:48:41.436 9010-9665 / com.mrgreaper2004.dmslittlehelper W / System.err:   在kotlin.collections.ArraysKt ___ ArraysKt.random(_Arrays.kt:2212)   2019-04-17 22:48:41.437 9010-9665 / com.mrgreaper2004.dmslittlehelper   W / System.err:位于   com.mrgreaper2004.dmslittlehelper.GeneratorFragment.pick(GeneratorFragment.kt:129)   2019-04-17 22:48:41.437 9010-9665 / com.mrgreaper2004.dmslittlehelper   W / System.err:位于   com.mrgreaper2004.dmslittlehelper.GeneratorFragment.colour(GeneratorFragment.kt:136)2019-04-17 22:48:41.437 9010-9665 / com.mrgreaper2004.dmslittlehelper   W / System.err:位于   com.mrgreaper2004.dmslittlehelper.GeneratorFragment.keyword(GeneratorFragment.kt:121)

最后一部分错误重复

1 个答案:

答案 0 :(得分:0)

好吧,我很怀疑!

fun pick( list :Array<String>):String{
    val tempResult = list.random()
    //val result= keyword(tempResult)
    return tempResult
}

fun colour():String {
    val list = arrayOf("blue","red","green","#size blue")
    val tresult=pick(list)
    val result = tresult.replace("#size",size())
    return result
}

fun size():String {
    val list = arrayOf("big","small","medium")
    val result=pick(list)
    return result
}

fun example():String{
    val list = arrayOf("#size #colour whale")
    val tresult=pick(list)
    val result = tresult.replace("#size",size()).replace("#colour",colour())
    return result
}

因为不是每个生成器都会使用每个生成器,所以我可以选择特定的生成器...答案突然出现在我眼前,因为我经常在数组中使用字符串来替换同一功能的多个调用。一个数组有多个不同的项目,每个项目都有一种颜色的机会,但是只能选择一个项目。我选择了一种将其分配给字符串的随机颜色,然后在需要颜色的每个项目中对其进行引用...无意义地随机选择多个颜色如果只用一个(可能不好解释)