2010-04-26 114 views
2

我试图显示一个随机字符串,每次按一个按钮时,从strings.xml中定义的一组字符串中按下按钮。这是字符串ID的示例显示随机字符串

<string name="q0"> 
    <string name="q1"> 
    <string name="q2"> 
    <string name="q3"> 
    <string name="q4"> 

用于获取随机字符串的java代码。

private static final Random rgenerator = null; 

    int RandomQ = R.string.q0 (rgenerator.nextInt(5) + 1); 
    String q = getString(RandomQ); 

,如果我尝试使用java代码我在R.string.q0“Q0”,这是The method q0(int) is undefined for the type R.string如果我尝试使用快速修复并创建一个方法得到一个错误,它的工作原理。但它不会让我保存或运行应用程序,因为它取代了我的创建方法并显示此消息

R.java was modified manually! Reverting to generated version! 

感谢您的阅读。

+1

R.string.qo被简单地用作一个整数以指向您的字符串q0,并在此之后加上括号,试图将其作为函数调用并将随机数传递给它。这会失败,因为你不能以这种方式处理一个静态整数。我可以理解你在做什么,但是这不是做这件事的方法,我建议你学习一些java的基础知识。 我已经在下面使用字符串数组回答了这个问题,它应该是非常清晰并且相当优雅的解决方案。如果没有意义,就问问。 – stealthcopter 2010-04-26 23:39:51

回答

21

您可以定义数组中的字符串,这将有助于简化这一任务(RES /价值/ array.xml):

<string-array name="myArray"> 
    <item>string 1</item> 
    <item>string 2</item> 
    <item>string 3</item> 
    <item>string 4</item> 
    <item>string 5</item> 
</string-array> 

然后,您可以创建一个数组来保存字符串,然后选择一个随机字符串从阵列的使用方法:

private String[] myString; 

myString = res.getStringArray(R.array.myArray); 

String q = myString[rgenerator.nextInt(myString.length)]; 

示例代码

package com.test.test200; 

import java.util.Random; 

import android.app.Activity; 
import android.content.res.Resources; 
import android.os.Bundle; 
import android.widget.TextView; 

public class Test extends Activity { 
/** Called when the activity is first created. */ 

    private String[] myString; 
    private static final Random rgenerator = new Random(); 

@Override 
public void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.main); 


    Resources res = getResources(); 

    myString = res.getStringArray(R.array.myArray); 

    String q = myString[rgenerator.nextInt(myString.length)]; 

    TextView tv = (TextView) findViewById(R.id.text1); 
    tv.setText(q); 
} 
} 
+0

感谢您的快速回复。我照你说的做了,但是在第一个“myString;”的末尾出现语法错误。错误是“令牌上的语法错误”;“,,expected”。改变;到,没有帮助。 – zaid 2010-04-26 23:59:54

+0

我已编辑此问题以包含您应该使用的代码示例。 – stealthcopter 2010-04-27 09:20:44

+0

非常感谢你帮助一个noob。 – zaid 2010-04-28 00:22:37

-2

为什么你需要这个?

R.string.q0

假设getString(RandomQ)是一个有效的声明,我想

int RandomQ = rgenerator.nextInt(5) + 1; 

会工作得很好。另外,作为一个备注:很多时候,IDE中的这些自动修复是不可靠和不安全的。除非你知道它为什么要告诉你做什么,否则不要这样做。

+0

这不会起作用,因为它只会尝试从随机数中获取一个字符串,而不是引用5个字符串中的一个。 – stealthcopter 2010-04-26 23:28:52

1

在res /值/ array.xml创建字符串数组:

<?xml version="1.0" encoding="utf-8"?> 
    <resources> 
<string-array name="custom_array"> 
    <item>aalia</item> 
    <item>asin</item> 
    <item>sonakshi</item> 
    <item>kajol</item> 
    <item>madhuri</item> 
</string-array> 
</resources> 

然后在活动编写代码

String[] array = context.getResources().getStringArray(R.array.custom_array); 

     String randomStr = array[new Random().nextInt(array.length)]; 

     text_dialog.setText(""+randomStr);