2010-04-26 102 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);