我刚开始使用android并编写一个简单的对话框应用程序,其中一些随机字符串呈现给用户。我开始考虑最好的方法吗?
如果strings.xml包含如下字符串:
<string name="quote1">blaha blaha</string>
<string name="quote2">chit chat</string>
我猜有更好的方法然后生成随机int然后执行
case 1:
R.id.quote1
我想它最终会在该文件中至少有50个不同的引号,这是一个丑陋的开关..
祝你好运
答案 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#中,但讨论与语言无关。