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?

  • Gibt es einen schnelleren Weg, um durch Reihen aus der Sqlite-Abfrage zu iterieren?
  • Was ist die reale Welt Genauigkeit der Telefonbeschleunigungsmesser bei der Positionierung verwendet?
  • Wie man die Sprache in der Android-Anwendung zwingt
  • Wie kann ich Bitmap in sharedPreferences in Android speichern und abrufen?
  • So fügen Sie externe JAR-Bibliotheken zu einem Android-Projekt von der Befehlszeile hinzu
  • Android und Unity 3D Spiel Entwicklung
  • GetLastKnownLocation () Android, wenn der letzte bekannte Ort aktualisiert wird?
  • Wie kann ich das Thema auf ProgressDialog einstellen?
  • Force-Anwendung zum Neustart auf erste Aktivität
  • ExpandableListView - Ist bedingte Erweiterung möglich?
  • OkHttp / Retrofit Standard-Timeout
  • Erstellen Sie eine 3d geformte Taste in Android
  • 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.