从string.xml中选择随机字符串

时间:2010-11-05 15:40:50

标签: android

我刚开始使用android并编写一个简单的对话框应用程序,其中一些随机字符串呈现给用户。我开始考虑最好的方法吗?

如果strings.xml包含如下字符串:

<string name="quote1">blaha blaha</string>
<string name="quote2">chit chat</string>

我猜有更好的方法然后生成随机int然后执行

case 1:
   R.id.quote1

我想它最终会在该文件中至少有50个不同的引号,这是一个丑陋的开关..

祝你好运

5 个答案:

答案 0 :(得分:3)

尝试将引号引入String array

答案 1 :(得分:1)

如果您无法使用String Array,请执行以下操作:

Android中的所有.xml描述符文件都编译为your.package.R类。

您可以使用Java Reflection在运行时检查此类。在您的情况下,R.id是一个内部静态类。

Class clazz = R.id.class;
Field[] fields = clazz.getDeclaredFields();

// chose random field
int rnd = (int) (fields.length * Math.random());
String randomString = getString(fields[rnd].getInt(null));

答案 2 :(得分:0)

通过xpath将引号加载到列表结构中,从列表中选择一个随机索引。显示引用。

或者,从xml文档中获取引号计数,获取该范围内的随机索引,在该索引处选择xml节点,然后显示它。

答案 3 :(得分:0)

如果你只有两个字符串就很简单吧。但是如果你有更多,你可能想要考虑制作一个字符串数组。您可以轻松地使用XML格式。

然后选择stringarray [random_number]作为你的字符串。

答案 4 :(得分:-1)

有一种方法可以从顺序列表中选择一个随机项而不知道列表的长度。

算法是:

numItems = 0;
selectedItem = null;
while not end of list
{
  item = read item from list
  numItems = numItems+1;
  if (numItems == 1)
    selectedItem = item;
  else  if (random(numItems) == 0)
    selectedItem = item
}

这个想法是新项目总是有1 / numItems概率替换当前所选项目。

有关详细信息,请参阅我的文章Random Selection from Large Groups。向下滚动到“如果我不知道有多少会怎么样?”代码在C#中,但讨论与语言无关。