Heim >Java >javaLernprogramm >Wie erhalte ich effizient eine Android-Ressourcen-ID aus ihrem String-Namen?

Wie erhalte ich effizient eine Android-Ressourcen-ID aus ihrem String-Namen?

DDD
DDDOriginal
2024-12-20 09:31:09650Durchsuche

How to Efficiently Get an Android Resource ID from its String Name?

Ressourcen-ID aus String in Android abrufen

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn