Ich muss eine Ressourcen-ID an eine Methode in einer meiner Klassen übergeben. Es muss sowohl die ID verwenden, auf die die Referenz verweist, als auch die Zeichenfolge. Wie soll ich das am besten erreichen?
Beispielsweise:
R.drawable.icon
Ich muss die Ganzzahl-ID dafür erhalten, aber ich brauche auch Zugriff auf die Zeichenfolge "Symbol".
Es wäre vorzuziehen, wenn ich nur die "Symbol" -String an die Methode übergeben müsste.
Antworten:
@EboMike: Ich wusste nicht, dass
Resources.getIdentifier()
es das gibt.In meinen Projekten habe ich dazu den folgenden Code verwendet:
Es würde so verwendet, um den Wert des
R.drawable.icon
Ressourcen-Integer-Werts zu erhaltenIch habe gerade einen Blog-Beitrag gefunden, der besagt, dass er
Resources.getIdentifier()
langsamer ist als Reflexion wie ich. Schau es dir an .quelle
getIdentifier()
müssen zwei Reflexionssuchen durchgeführt werden. In Ihrem obigen BeispielgetIdentifier()
würden SieDrawable.class
Reflection verwenden, um die Ressourcen-ID abzurufen, und dann eine weitere Reflection-Suche, um sie abzurufen. Das würde den Geschwindigkeitsunterschied erklären. Davon abgesehen sind beide nicht besonders schnell und müssen daher wirklich zwischengespeichert werden (insbesondere wenn sie in einer Schleife oder für Zeilen in a verwendet werdenListView
). Das große Problem des Reflexionsansatzes besteht darin, dass Annahmen über die Interna von Android getroffen werden, die sich in einer zukünftigen Version ändern könnten.context
Parameter?Mit dieser Funktion können Sie die Ressourcen-ID abrufen.
Also, wenn Sie für Drawable Call-Funktion wie diese erhalten möchten
und für String kann man es so nennen
Lesen Sie dies
quelle
Dies basiert auf der @ Macarse-Antwort.
Verwenden Sie diese Option, um die Ressourcen-ID schneller und codefreundlicher abzurufen.
Beispiel:
quelle
Das Abrufen einer Anwendungsressourcen- ID aus dem Ressourcennamen ist eine häufig gestellte und gut beantwortete Frage.
Wie eine native Android- Ressourcen-ID aus dem Ressourcennamen abgerufen wird, ist weniger gut beantwortet. Hier ist meine Lösung, um eine Android-Zeichenressource nach Ressourcennamen zu erhalten:
Die Methode kann geändert werden, um auf andere Ressourcentypen zuzugreifen.
quelle
if(android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.LOLLIPOP){ return mContext.getDrawable(resourceId); } else { return mContext.getResources().getDrawable(resourceId); }
Wenn Sie einen String und ein Int koppeln müssen, wie wäre es dann mit einer Map?
quelle
Sie können verwenden
Resources.getIdentifier()
, obwohl Sie das Format für Ihre Zeichenfolge verwenden müssen, wie Sie es in Ihren XML-Dateien verwenden, dhpackage:drawable/icon
.quelle
getResourceEntryName(id)
suchen Sie dann den Zeichenfolgennamen. Kein Durcheinander, um "Symbol" aus dem längeren Text zu finden.Mir hat das gefallen, es funktioniert für mich:
quelle
quelle
quelle
getIdentifier
mussid
. Dies wurde nicht einmal in Android Dev Site erwähnt. Woher hast du diese Informationen?Da Sie sagten, Sie wollten nur einen Parameter übergeben, und es schien nicht wichtig zu sein, welchen, könnten Sie die Ressourcenkennung übergeben und dann den Zeichenfolgennamen dafür herausfinden, also:
Dies ist möglicherweise der effizienteste Weg, um beide Werte zu erhalten. Sie müssen nicht herumspielen, um nur den "Symbol" -Teil aus einer längeren Zeichenfolge zu finden.
quelle
In Ihrer res / layout / my_image_layout.xml
Gehen Sie folgendermaßen vor, um diese ImageView anhand ihres @ + ID-Werts in Ihrem Java-Code zu erfassen:
quelle
Der Kotlin-Ansatz
Verwendung:
quelle
In MonoDroid / Xamarin.Android können Sie Folgendes tun:
Da GetIdentifier in Android nicht empfohlen wird, können Sie Reflection folgendermaßen verwenden:
wo ich vorschlage, einen Versuch / Fang zu machen oder die Zeichenfolgen zu überprüfen, die Sie übergeben.
quelle
Zum Abrufen der Drawable-ID vom String-Ressourcennamen verwende ich diesen Code:
quelle