2016-07-13 89 views
1

我wan't設置的TextView的字符串值文本我在string.xml變化的TextView與Java類string.xml資源

,所以我想在java類與開關的情況下做到這一點

但不能置我TextView的文本,當我運行應用程序,TextView的是空

對不起,如果它是一個簡單的愚蠢的錯誤:)

這是我的佈局

<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="match_parent" android:layout_height="match_parent" 
android:background="@drawable/shape"> 

<TextView 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content" 
    android:id="@+id/textview" 
    android:textColor="@color/txt_dialog" 
    android:textSize="25sp"/> 

</RelativeLayout> 

,這是string.xml

<resources> 
<string name="t1"> hi </string> 
<string name="t2"> hello </string> 
<string name="t3"> ok </string> 
</resources> 

最後,這是我的Java代碼應該選擇那些字符串蒙山隨機選擇一個,然後設置,在對話框

public void hi(){ 
    TextView txt_truth = (TextView) findViewById(R.id.textview); 
    final Dialog dialog = new Dialog(this); 
    dialog.setContentView(R.layout.mylayout); 
    Random random = new Random(); 
    int hi_random = random.nextInt(2) + 1; 

    switch (hi_random){ 
     case 1: 
      if (txt_truth != null) { 
       txt_truth.setText(getResources().getString(R.string.t1)); 
      } 
      break; 
     case 2: 
      if (txt_truth != null) { 
       txt_truth.setText(getResources().getString(R.string.t2));} 
      break; 
     case 3: 
      if (txt_truth != null) { 
       txt_truth.setText(getResources().getString(R.string.t3));} 
      break;} 
    dialog.show(); 
} 
+1

顯而易見的:'txt_truth.setText(getResources()的getString(R.string.t1));'但是你的字符串被命名爲'A1,A2, ...',而不是't1,t2,...' –

+0

對不起,這個錯誤發生在我寫這個時,我現在編輯 –

+0

另外,如果你是基於這個:'int hi_random = random.nextInt 45)+ 1;'很有可能你得到的數字超出了你的轉換範圍。 –

回答

3

你必須得到從對話視圖通貨膨脹的TextView的id這樣

View view = LayoutInflater.from(this).inflate(R.layout.mylayout, null); 
    dialog.setContentView(view); 
    TextView txt_truth = (TextView) view.findViewById(R.id.textview); 
+0

那是什麼ctx? –

+0

@MohsenMohseni:ctx表示上下文,你可以通過這個,取決於你在哪裏使用 –

+0

這個工作,非常感謝 –

0
的TextView

檢查您的字符串資源的名稱,他們是a1或t1系列

public void hi(){ 
TextView txt_truth = (TextView) findViewById(R.id.textview); 
final Dialog dialog = new Dialog(this); 
dialog.setContentView(R.layout.mylayout); 
Random random = new Random(); 
int hi_random = random.nextInt(45) + 1; 

switch (hi_random){ 
    case 1: 
     if (txt_truth != null) { 
      txt_truth.setText(getResources().getString(R.string.a1)); 
     } 
     break; 
    case 2: 
     if (txt_truth != null) { 
      txt_truth.setText(getResources().getString(R.string.a2));} 
     break; 
    case 3: 
     if (txt_truth != null) { 
      txt_truth.setText(getResources().getString(R.string.a3));} 
     break;} 
    dialog.show(); 
} 
+0

他已糾正它 –

2

不能置我TextView的文本,當我運行應用程序,TextView的 是空

string.xml只有三個,其希望在TextView中顯示隨機字符串,但使用的是45獲取隨機數,生成範圍爲[0-45]+1

1之間

獲取數3爲:

int hi_random = random.nextInt(2) + 1; 
0

在我的頭頂,我認爲錯誤在你的隨機生成器中。您指定的上限值爲45.

nextInt(int n)方法用於獲取僞隨機數,均勻分佈的int值在0(包含)與指定值(不包含)之間,從此隨機數繪製發電機的順序。

int hi_random = random.nextInt(3) + 1; 

請嘗試上面的代碼,並評論它是否有效。

您還可以檢查nextInt的Java文檔:nextInt javadoc

+1

'random.nextInt(3)+ 1'這會給int作爲'1,2,3,4'但'4'不在開關的情況下 –

+0

它的下限和上限排他。我在答案中提到了這一點 –