Bei der Übergabe einer Ressourcen-ID an eine Methode ist es oft wünschenswert, sowohl auf die ID als auch auf die entsprechende Zeichenfolge zuzugreifen. Betrachten Sie beispielsweise die Ressource „icon“:
R.drawable.icon
Um sowohl die ID als auch die Zeichenfolge „icon“ zu erhalten, können mehrere Ansätze untersucht werden:
Eine Lösung besteht darin, die Ressourcen zu nutzen. getIdentifier()-Methode:
int resID = getResources().getIdentifier("icon", "drawable", getPackageName()); String iconString = "icon";
Jüngste Untersuchungen haben jedoch gezeigt, dass Resources.getIdentifier() weniger effizient sein kann als die Verwendung Reflexion.
Alternativ können Sie den folgenden reflexionsbasierten Code verwenden:
public static int getResId(String resName, Class<?> c) { try { Field idField = c.getDeclaredField(resName); return idField.getInt(idField); } catch (Exception e) { e.printStackTrace(); return -1; } }
Um diese Methode für die Ressource „Symbol“ zu verwenden:
int resID = getResId("icon", R.drawable.class); // or other resource class String iconString = "icon";
Obwohl Dieser Reflexionsansatz ist möglicherweise effizienter, es ist jedoch wichtig, mögliche Nachteile zu beachten. In einem Release-Build mit aktivierter Code-/Ressourcenverkleinerung schlägt diese Lösung möglicherweise fehl. Darüber hinaus funktioniert es möglicherweise nicht, wenn der Zeichenfolgenname vom erwarteten Ressourcennamenformat abweicht.
Das obige ist der detaillierte Inhalt vonWie erhalte ich effizient eine Android-Ressourcen-ID aus ihrem String-Namen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!