从string.xml中挑选随机字符串
问题描述:
我刚刚开始使用android,并用向用户呈现的一些随机字符串编写了一个简单的对话框应用程序。我开始考虑最好的方式来做到这一点?从string.xml中挑选随机字符串
如果strings.xml中包含字符串一样的:
<string name="quote1">blaha blaha</string>
<string name="quote2">chit chat</string>
我想有一个更好的办法,然后生成一个随机的int和然后做
case 1:
R.id.quote1
我想这将最终至少该文件中有50个不同的引号,这是一个丑陋的开关..
致以问候
答
通过xpath将您的报价加载到列表结构中,从列表中选择一个随机索引。显示该报价。
或者,从xml文档中获取引号的数量,获得该范围内的随机索引,选择该索引处的xml节点并显示它。
答
如果你只有两个字符串,它非常简单,正确。但是如果你有更多的东西,你可能想考虑制作一个字符串数组。您可以轻松地使用XML。
然后只要选择stringarray [random_number]作为你的字符串。
答
有一种方法来选择的顺序列表随机项不知道列表的长度。
的算法是:
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#,但讨论与语言无关。
答
如果您不能使用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));
您可能需要进一步解释了一步明确性:然后你就可以将整个数组加载到与getStringArray资源的方法,你的活动(http://developer.android.com/reference/android/content/res /Resources.html#getStringArray(int)),并从数组中随机选择,无需为每个资源ID显式编码开关。这几乎肯定是最简单的方法。 – 2010-11-05 16:15:20
听起来不错,我会试一试! – elwis 2010-11-05 16:21:48