2012-03-30 23 views
2

Ich hatte heute ein interessantes Problem. Ich habe 4 Saiten, die ich zufällig auf App zeigen muss. Also fügte ich einfach die Strings zu meiner string.xml hinzu und setzte meine Textansicht so, dass der Text alsMit Reflection mit Android

textView.setText (R.string.text_1);

oder (wenn Zufallszahl betrug 2)

textView.setText (R.string.text_2);

und so weiter

ich beobachtet, dass die Änderung nur in letzte Zeichen ist, so versucht, mithilfe von Reflektion

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));

Nun ist die field.get (null) tatsächlich die Id (hexadezimale Zahl zurückgeben in R.java) Wert statt String-Wert würde ich erwarten.

Gibt es eine Möglichkeit, tatsächlichen Wert der Zeichenfolge mit Reflektion oder das ist etwas in Androide, mit denen ich leben muss, zu holen?

Antwort

1
getResources.getString(resourceId); 
+1

Ehrfürchtig .. Dieses worked- System.out.println ("**********" + getResources(). getString ((Ganzzahl) field.get (null))); – Kamal

0

Ich schlage vor, Sie Array von Strings zu verwenden und Zufallsgenerator wählen sie

2
R.string.text_2 

immer die Hex-Zahl zurück. Um wirklich den String-Wert zu erhalten, müssen Sie versuchen, die folgenden

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

Sie können Ihre Ressourcen-ID aus dem Ressourcenmanager einfach anfordern:

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); 
Verwandte Themen