2016-01-22 12 views
5

Ich habe einen XML-Zeichenfolge in meiner values/strings.xml DateiWie konvertiert String in seine Ressource-ID (Android Studio)

<string name="pokemon_d">150</string> 

Und ich habe den String "150" in meinem Controller MainActivity.java. In meinem MainActivity, wie kann ich das String in die Ressource-ID der Zeichenfolge pokemon_d in der XML-Datei konvertieren? Ist das überhaupt möglich?

+0

was meinen Sie mit der Umwandlung der String-Ressource? in was umwandeln? – AndroidMechanic

+3

Lassen Sie uns einen Schritt zurückgehen: Was hat zu dieser Frage geführt, d. H. Was wollen Sie wirklich erreichen? – Henry

Antwort

6

Sie können keine Kennung von Wert erhalten, aber Sie können Ihre Bezeichnernamen wie ein Wert aussehen lassen und es durch string name bekommen,

Also, was ich vorschlagen,

verwenden Ihre String Ressourcennamen so etwas wie resource_150,

<string name="resource_150">150</string>

hier Jetzt resource_ ist für die Zeichenfolge Einträge in string.xml Datei gemeinsam, so in Ihrem Code,

String value = "150"; 
int resourceId = this.getResources(). 
      getIdentifier("resource_"+value, "string", this.getPackageName()); 

Jetzt resourceId Wert ist als gleichwertig mit R.string.resource_150

Nur sicher machen hier this vertreten Ihre Anwendungskontext. In Ihrem Fall wird MainActivity.this funktionieren.

+0

Hoppla, das habe ich vermisst. Vielen Dank. – user370305

+1

Das hat funktioniert! Vielen Dank – gciluffo

1

Die Ressource-ID ist R.string.pokemon_d

Ich glaube nicht, Sie für eine Ressource Id durch den String-Wert suchen. Du könntest eine Karte mit dem Wert und resId machen, so dass der Schlüssel der Wert ist und der Wert der Karte deine Res-ID ist. Wenn du das tust, könntest du selbst nachsehen, aber ich bin mir nicht einmal sicher, warum das nützlich wäre.

0

Ich habe einige Tipps hier: Android, getting resource ID from string?

Im Folgenden ein Beispiel, wie Zeichenfolgen und ihre Werte in strings.xml definiert zu erhalten. Das einzige, was Sie tun müssen, ist eine Schleife zu machen und zu testen, welche Zeichenfolge Ihren Wert hält. Wenn Sie dies mehrmals wiederholen müssen, ist es möglicherweise besser, ein Array zu erstellen. // ---------

String strField = ""; 
    int resourceId = -1; 
    String sClassName = getPackageName() + ".R$string"; 
    try { 
     Class classToInvestigate = Class.forName(sClassName); 

     Field fields[] = classToInvestigate.getDeclaredFields(); 

     strField = fields[0].getName();  
     resourceId = getResourceId(strField,"string",getPackageName()); 

     String test = getResources().getString(resourceId); 

     Toast.makeText(this, 
         "Field: " + strField + " value: " + test , 
         Toast.LENGTH_SHORT).show(); 


    } catch (ClassNotFoundException e) { 
      Toast.makeText(this, 
         "Class not found" , 
         Toast.LENGTH_SHORT).show(); 
    } catch (Exception e) { 
     Toast.makeText(this, 
         "Error: " + e.getMessage() , 
         Toast.LENGTH_SHORT).show(); 
    } 


} 
public int getResourceId(String pVariableName, String pResourcename, String pPackageName) 
{ 
    try { 
     return getResources().getIdentifier(pVariableName, pResourcename, pPackageName); 
    } catch (Exception e) { 
     e.printStackTrace(); 
     return -1; 
    } 
} 
Verwandte Themen