Wie man auf Ressource mit dynamischen Namen in meinem Fall zugreifen?

Wenn ich den Bildnamen als Variable wie folgt bekomme:

var imageName = SERVICE.getImg(); 

Dann, wie bekomme ich die Ressource mit R.drawable.???? , Ich habe versucht, R.drawable[imageName] , aber es ist fehlgeschlagen. Irgendwelche Vorschläge?

  • So legen Sie die Indexnummer auf dem Kartenstift fest
  • Wie fügt man Ereignisse für einen android4.0 Standardkalender hinzu?
  • Nach der Orientierung ändern sich die Tasten auf einem Widget nicht
  • Bekommen Akku-Level bei Android-Widget
  • Hinzufügen von Icons zu PreferenceScreen-Einträgen
  • Android Spinner - Wie kann man Dropdown-Ansicht transparent machen?
  • Füge Polsterung programmgesteuert hinzu
  • Text zum Kopieren von Android EditText auswählen
  • 5 Solutions collect form web for “Wie man auf Ressource mit dynamischen Namen in meinem Fall zugreifen?”

     int id = getResources().getIdentifier(imageName, type, package); 

    Dies wird Ihnen die ID der Ressource, die Sie suchen. Mit ihr können Sie dann auf die Ressource aus der R-Klasse zugreifen.

    Verwenden Sie nur den name :

    Sie können auch alle 3 Infos im Parameter "name" mit folgendem Format "package:type/image_name" : "package:type/image_name" , so etwas wie:

     int id = getResources().getIdentifier("com.my.app:drawable/my_image", null, null); 

    Dies ist nützlich, wenn Sie mit externen Komponenten oder Bibliotheken arbeiten, die Sie nicht oder nicht ändern können, wie getIdentifier() aufgerufen wird. ZB : AOSP Launcher3

    Versuche dies:

     int id = getResources().getIdentifier(imageName, "drawable", getPackageName()); 

    Du brauchst Reflexion.

    Angenommen, Sie haben R.drawable.image1, wenn Sie über den String-Namen "image1" darauf zugreifen möchten, sollte folgendes funktionieren:

     String Name = "image1"; int id = R.drawable.class.getField(Name).getInt(null); 

    Aber bemerken, dass es nur die Id des Bildes bekommt, du brauchst immer noch den Strömer, um das eigentlich ausziehbar zu bekommen.

    Verwenden Sie diese Funktion

     public static String getResourceString(String name, Context context) { int nameResourceID = context.getResources().getIdentifier(name, "string", context.getApplicationInfo().packageName); if (nameResourceID == 0) { throw new IllegalArgumentException( "No resource string found with name " + name); } else { return context.getString(nameResourceID); } } 

    Sie können die Methode getIdentifier verwenden, die Ihnen die Ressourcen-ID über den Namen gibt. Überprüfen Sie diesen Thread für weitere Details.

    Das Android ist ein Google Android Fan-Website, Alles ├╝ber Android Phones, Android Wear, Android Dev und Android Spiele Apps und so weiter.