2012-12-22 2 views
8

Ich möchte die Liste der Strings, die in der Datei strings.xml vorhanden sind.Liste der Strings erhalten, die in der Datei strings.xml in Android vorhanden sind

Weiß jemand, wie man es bekommt ??? Eine Sache, die ich fand, ist, dass es die IDs in sequentieller Reihenfolge innerhalb von R.java zuweist, aber wie man die Start-ID bekommt, ist nicht klar.

Zum Beispiel habe ich 100 Strings in meiner strings.xml wie unten und ich möchte zu einem Zeitpunkt nicht wie getResources() eingeben. GetString (int ID) für einzelne.

<string name="app_label">Calendar</string> 
<string name="what_label">What</string> 
<string name="where_label">Where</string> 
<string name="when_label">When</string> 
<string name="timezone_label">Time zone</string> 
<string name="attendees_label">Guests</string> 
<string name="today">Today</string> 
<string name="tomorrow">Tomorrow</string> 
+0

können Sie es mit getResources.getString ("your_string_name"); –

+0

Ich weiß, aber ich will Liste aller Zeichenfolgen, wenn ich diese Methode verwende, muss ich IDs aller Zeichenfolgen sagen, wenn 100 Zeichenfolgen da sind, muss ich dieses 100 Mal schreiben –

+2

Siehe meine Antwort hier http://StackOverflow.com/ Fragen/13820645/Vergleichen-Namen-jeder-Ressource-mit-der-Inhalt-einer-Variable-von-SQLite-Datenbank/13821330 # 13821330 – Luksprog

Antwort

5

Wenn Sie auf alle Strings aus der Datei strings.xml zugreifen möchten, können Sie die Reflektion der Klasse R.string verwenden. Ein Beispiel findet sich in this answer, Sie müssen nur Zeichen mit Zeichenfolgen ersetzen.

+0

Danke seine Arbeit !!! :) –

10

Sie können Ihre Zeichenfolgen in der Datei res \ values ​​\ strings.xml wie folgt deklarieren.

<string-array name="vehiclescategory_array"> 

     <item>Cars</item> 
     <item>Bikes</item> 
     <item>RVs</item> 
     <item>Trucks</item> 
     <item>Other Vehicles</item> 

</string-array> 

In Ihrer Aktivitätsklasse können Sie wie folgt darauf zugreifen.

In der obigen Liste, welche Sequenz Sie deklarieren, genauso wie es dem Array in Ihrer Aktivität zugeordnet ist. Angenommen, Autos werden Kategorien [0] zugewiesen. Hoffe das hilft.

+0

Das sieht gut aus :) aber mein Problem ist, ich habe Strings bereits als einzelne Elemente in XML-Datei und ich definiert muss alle diese Strings lesen –

+0

Hinzugefügt mehr Erklärung für Ihre Referenz Appu :) –

+0

Sie brauchen IDs aus den Strings? Wenn ja, hast du es mit getIdentifier() versucht? Aber ich muss vielleicht sagen, dass wenn Sie kein Array verwenden, müssen Sie jeden String-Namen in Ihrem Aktivitätscode erwähnen, um die ID des entsprechenden Strings zu erhalten, wenn ich Sie richtig verstanden habe. – Kanth

2

Sie könnten ein Integer-Array mit einem Eintrag für jeden String deklarieren. Ich habe das einmal für eine Reihe von Farben gemacht, also stelle ich mir vor, dass es auch für Streicher funktioniert.

res/Werte/arrays.xml

<integer-array name="app_strings"> 
    <item>@string/app_label</item> 
    <item>@string/what_label</item> 
    <item>@string/where_label</item> 
    <item>@string/when_label</item> 
    <item>@string/timezone_label</item> 
    <item>@string/attendees_label</item> 
    <item>@string/today</item> 
    <item>@string/tomorrow</item> 
</integer-array> 

Dann in Ihrem Code, würden Sie eine Schleife über das Array und verwenden, um jeden Wert als Argument für getString().

int[] stringIds = getResources().getIntArray(R.array.app_strings); 
String[] strings = new String[stringIds.length]; 
for (int i = 0; i < stringIds.length; i++) { 
    strings[i] = getString(stringIds[i]); 
} 

Das Problem ist, müssen Sie manuell Ihre arrays.xml aktualisieren, wenn Sie Ihre String-Ressourcen ändern, so ist es sicherlich nicht ideal.

5
Field[] fields = R.string.class.getDeclaredFields(); // or Field[] fields = R.string.class.getFields(); 
String str = ""; 
for (int i =0; i < fields.length; i++) { 
    int resId = getResources().getIdentifier(fields[i].getName(), "string", getPackageName()); 
    str += fields[i].getName() + " = "; 
    if (resId != 0) { 
     str += getResources().getString(resId); 
    } 
    str += "\n"; 
} 

Sie erhalten alle Codes von Strings mit seinen Werten in "str" ​​Variable.

Verwandte Themen