2013-03-18 10 views
40

Ich habe dies versucht:Mit Android getIdentifier()

r = Resources.getSystem().getIdentifier("ball_red","drawable","com.Juggle2"); 
Log.i("FindBall","R = "+r); 

Und:

r = Resources.getSystem().getIdentifier("com.Juggle2:drawable/ball_red", null, null); 

Aber 'r' immer als Null landet.

Ich rufe diese Linie von innerhalb einer Helfer-Klasse, die keine Aktivität ist und nichts erweitert, so dass ich nicht getResources() anrufen kann, aber ich kann es aus meiner SurfaceView übergeben.

Schließlich möchte ich "ball_red" durch eine Variable ersetzen, aber das erste Ding ist zuerst. Dies funktioniert nicht.

com.Juggle2 ist in der Tat mein Paketname. drawable ist der res Ordner, in dem es sich befindet, und der Name der Datei ist in der Tat ball_red.

R.java sagt:

 public static final int ball_red=0x7f020027; 

Also ich bin nicht sicher, warum es nicht funktioniert.


So kann ich nicht Ressourcen verwenden, muss ich einen Kontext passieren, und ich, dass diese Art und Weise: Innen hier:

class Collection extends SurfaceView implements SurfaceHolder.Callback { 

Ich mache eine neue Instanz meiner Klasse und übergibt es getContext() als Parameter.

+2

Laut Dokumentation von 'Resources.getSystem()': * "Zurückgeben eines globalen Objekts für freigegebene Ressourcen, das ** Zugriff auf Systemressourcen (keine Anwendungsressourcen) ** bereitstellt und nicht für den aktuellen Bildschirm konfiguriert ist (can keine Maßeinheiten verwenden, ändert sich nicht basierend auf der Ausrichtung usw.) "* Wie von @Sajmon beantwortet, müssen Sie eine' Context'-Instanz an Ihre (statische) Hilfsmethode übergeben, um auf anwendungsspezifische Ressourcen zuzugreifen. –

+0

vom Typ-Aspekt wird die Groß- und Kleinschreibung berücksichtigt, z. "Strings", "Drawable" und nicht "Strings" oder "Drawable" –

Antwort

106

Da Sie innerhalb einer Tätigkeit sind, ist es genug

int resId=YourActivity.this.getResources().getIdentifier("ball_red", "drawable", YourActivity.this.getPackageName()); 

zu schreiben oder wenn Sie es nicht von einer inneren Klasse aufrufen

int resourceID = getResources().getIdentifier("ball_red", "drawable", getPackageName()); 

Hinweis

getIdentifier() Returns 0 if no such resource was found. (0 is not a valid resource ID.) 

Überprüfen Sie

Check in Ihrem R.java auch, ob es einen drawable mit dem Namen ball_red

zB:

public static final class drawable { 
     public static final int ball_red=0x7f020000; 
} 

EDIT Wenn Sie sich nicht an Aktivitäten sind dann Sie muss eine context instead of resources as parameter dann tun dies

int resId=context.getResources().getIdentifier("ball_red", "drawable", context.getPackageName()); 
+0

Ich rufe es nicht von einer Aktivität, und ich habe keinen Zugriff auf 'getResources()', aber ich kann Ressourcen von a übergeben 'SurfaceView' Klasse, also probiere ich das – Houseman

+0

Ja, das' drawable' ist da. – Houseman

+0

@OWiz Wenn Sie in keiner Aktivität sind, dann müssen Sie einen Kontext anstelle von Ressourcen als Parameter übergeben, dann tun Sie dies int resId = context.getResources(). GetIdentifier ("ball_red", "drawable", context.getPackageName ()); –

2

Obwohl die Antwort von Festus Tamakloe korrekt ist, fand ich eine Eigenart in dieser Funktion.

Wenn Sie eine string-array in einer XML-Datei deklarieren, muss auf sie zugegriffen werden, indem der Basisressourcentyp array aufgerufen wird, wobei string-array Ergebnisse in ANID 0 zurückgibt.

+0

Sie haben mir gerade Stunden gerettet, danke! –

5

Für Xamarin-Benutzer hatte ich das Problem, wo ich ein Symbol mit Groß- und Kleinbuchstaben hinzugefügt hatte (z. B. iconVaccine.png) und sich auf den oberen Namen iconVaccine bezog.

Xamarin ermöglicht es Ihnen, dies zu tun (auch wenn Sie nicht tun sollten), aber wenn die App den Namen abgeflacht werden kompiliert wird Fall zu senken, so dass Sie auf dem unteren Gehäusevariante beziehen, müssen Sie wie folgt vor:

Bildname: iconVaccine.png

Xamarin Referenz: iconVaccine (wie in Resource.designer.cs erstellt, aber fehlschlagen)

Correct Referenz: iconvaccine

Hoffnung, das hilft!

Verwandte Themen