2012-03-30 79 views
2

今天我遇到了一個有趣的問題。我有4個字符串,我需要隨機顯示在應用程序上。所以我只是將字符串添加到我的string.xml,並設置我的文本視圖來顯示文本爲在Android中使用反射

textView.setText(R.string.text_1);

或(如果隨機數是2)

textView.setText(R.string.text_2);

我觀察到的變化只是在最後一個字符,使用反射

Class c = Class.forName("com.startpage.mobile.R$string");

Field field = c.getDeclaredField("text_"+num); //num is 1/2/3/4 System.out.println("**** "+field.get(null));

現在field.get(空)實際返回的ID,這樣試過(十六進制數在R.java中)值而不是字符串值我會期望。

有沒有一種方法來獲取字符串的實際值使用反射或這是Android的東西,我將不得不住?

回答

1
getResources.getString(resourceId); 
+1

真棒。這實施─的System.out.println( 「**********」+ getResources()。getString((Integer)field.get(null))); – Kamal 2012-03-30 06:52:22

0

我建議你使用字符串數組和選擇隨機項從中

2
R.string.text_2 

總是返回十六進制數。要真正得到的字符串值,你必須嘗試以下

MyActivity.this.getResources.getString(R.string.text_2); 
0

您可以簡單地請求您的資源ID從資源管理器:

Class c = Class.forName("com.startpage.mobile.R$string"); 
Field field = c.getDeclaredField("text_" + num); 
int resId = (int)field.get(null); 
String text = this.getResources().getString(resId); 
textView.setText(text);