2010-08-18 13 views
9

Ich habe eine ImageView in meiner Szene, die ich möchte die Quelle dynamisch basierend auf Benutzereingaben festlegen.Quelle von ImageView dynamisch festlegen

Angenommen, ich habe 4 Bilder in meinem Zeichnungsordner: aaa.png, bbb.png, ccc.png und ddd.png.

Wenn meine Anwendung lädt stelle ich das Bild auf: aaa.png

myImageView.setImageResource(R.drawable.aaa); 

jetzt habe ich eine EditText, wo ein Benutzer in bbb eingeben können, und ich möchte die Bildquelle ändern, die bbb.png zu sein oder der Benutzer gibt ccc ein, wechselt die Quelle zu ccc.png usw.

Wie kann ich den Parameter in setImageResource() dynamisch setzen? Ich habe versucht, mit dem Drawable Objekt vergeblich zu spielen ...

Antwort

2

Wenn Sie eine offene Texteingabe zulassen möchten, müssen Sie entweder raw assets verwenden, um sie nach Zeichenfolgennamen abzurufen (siehe Randnotiz auf dieser Seite), oder verwenden Sie magical Java reflection, um ein Feld der R-Klasse abzurufen Name. Alternativ könnten Sie eine HashMap von Zeichenketten auf R.drawable Integer-Werten halten und nachschlagen, aber dann müssen Sie diese Hashmap beibehalten.

+0

Ich denke, die hashmap ist, was ich am Ende tun werde. Frage dazu, wenn Assets hinzugefügt werden, ändern sich die Ganzzahlwerte für vorhandene Assets (Inkrement)? Oder würden sie gleich bleiben? – Kyle

+0

Ressourcen, meinst du? R.ids werden automatisch in Konstanten und Build-Zeit neu kompiliert und Sie sollten definitiv nicht versuchen, auf sie durch eine hardcoded Nummer zuzugreifen. Verwenden Sie einfach die Konstanten aus der R.id-Datei und alles wird gut. –

0

Wenn Sie nur Bilder anzeigen möchten, die Sie in Ihre Zeichenbilder geladen haben, können Sie eine Spinner verwenden, wo die ID für das Element als Ressource festgelegt wird für die Drawable. Das wäre für Sie einfacher und für den Benutzer einfacher.

0

Wenn Sie möchten, um Reflexionen verwenden haben einen Blick auf den Code unten:

R.drawable ourRID = new R.drawable(); 
         Field photoNameField = ourRID.getClass().getField("aaa"); 
myImageView.setImageResource(photoNameField.getInt(ourRID)); 

Hoffe, es hilft.

Verwandte Themen