R.drawable.variable laden

C

Chris92

Fortgeschrittenes Mitglied
0
Hallo ich wollte wissen ob man irgendwie in R.drawable.___________ eine variable laden kann. Denn ich will jenachdem was vorher angeklickt wurde ein individuelles Bild laden. Der Name des Bildes soll in einer Variable stehen, z.B:

Klicke ich auf Button 1 bekommt die Variable Bild = "Bild 1"
Klicke ich auf Button 2 bekommt die Variable Bild = "Bild 2"

als Beispiel.

Diese Variable will ich jetzt in R.drawable.____einsetzen aber ich weis nicht wie. Hab auch schon danach gegoogelt aber nichts für mein Problem bezüglich gefunden. Hoffe ihr könnt mir weiter helfen.

MFG Chris92
 
Hallo,

da R.drawable lediglich ne statische Klasse mit Feldern ist, gibt es leider keine Methode a la R.drawable.get(myVariable).

Du könntest das ganze aber über Reflection (java.lang.reflection) lösen, z.B.

Code:
try {
   Class c = R.drawable.class;
   Field f = c.getDeclaredField(myVariable);
   Resources res = getApplicationContext().getResources();
   Drawable d = res.getDrawable(f.getInt(c));
} catch(Exception ex) { }
Das Drawable kannst Du dann z.B. einer ImageView oder als Background zuweisen.

Oder eine andere simple Möglichkeit wäre, das die Click-Methode ein R.drawable.wasauchimmer zurückliefert. Brauchst Du denn umbedingt die Varibable?

Gruß Itso
 
Die Werte R.drawable.wasAuchImmer sind stinknormale ints. Die kann man normal an Variablen zuweisen.

Code:
int id = R.drawable.wasAuchImmer;
Dein Problem scheint zu sein, dass Du irgendeinem View eine dieser Resourcen zuwesien willst.
Da gibt es in den Views dann entsprechende Funktionen.
Zum Beispiel:

Code:
ImageView img = (ImageView)findViewById(R.id.hierDasBild);
img.setImageResource( id ); // mit der id von oben
 
Wenn dein Problem ist, dass du den Namen vom Bild zwar hast, aber du dann nicht findViewById(R.Drawable.NameDerVariablen) aufrufen kannst, musst du folgendes benutzen:

Code:
int id = this.getResources().getIdentifier(NameDerVariablen, "Drawable", NameDeinesPackages);
img.setImageResource(id);
 
Code:
int id = this.getResources().getIdentifier(NameDerVariablen, "Drawable", NameDeinesPackages);
img.setImageResource(id);

getIdentifier() kannte ich noch nicht. Spart man sich den eigenen Weg über Reflection, wobei ich mal stark annehme, dass getIdentifier() einen ähnlichen Weg geht wie mein Beispiel.

Man lernt eben nie aus :biggrin:
 
  • Danke
Reaktionen: Chris92
Also mein Problem liegt darin, dass ich eine ImageView auf der Activity habe wo immer die gleiche ist die ändere ich nicht. Ich will nur das Bild in der ImageView ändern.

Die Auswahl des Bildes bekomme ich von eine Activity über die Intent parameter übertragen. Also jenachdem welcher Button auf der Activity davor geklickt wurde solle auf der Activity wo sich die ImageView befindet das entsprechende Bild laden.

Mein bisheriger Code aber der funktioniert leider nicht

Code:
BildHilfe = (ImageView)findViewById(R.id.Bild);
        String Bildvar = "icon";

        int id = this.getResources().getIdentifier(Bildvar, "Drawable", "lu.example.Bildladen");
        BildHilfe.setImageResource(id);

Bekomme keine Fehlermeldung es wird einfach nichts geladen.

MFG Chris92
 
Zuletzt bearbeitet:
Ist der Bildname und das Package richtig? Versuch's sonst mal damit "drawable" klein zu schreiben (weiß nicht ob das einen Unterschied macht..)
Folgendes funktioniert bei mir und das Bild wird angezeigt:

MainActivity.java
Code:
package de.test;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ImageView;

public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        
        ImageView mImageView = (ImageView)findViewById(R.id.imageview);
        String mBildname = "icon";
        
        int id = this.getResources().getIdentifier(mBildname, "drawable", "de.test");
        
        mImageView.setImageResource(id);
    }
   
}
 
  • Danke
Reaktionen: Chris92
Drawable muss klein geschrieben werden..., das war ja klar^^. Vielen Dank für deine Hilfe. Danke euch allen!

MFG Chris92
 
Meinst du bei einem String?
Bei Strings kannst du einfach sowas machen:

Code:
String lowerCase = vorherigerString.toLowerCase();
 
Jo weis habs schon herausgefunden... hab wieder mal zu kompliziert gedacht sry^^
Danke trotzdem

MFG Chris92
 
Zugriff auf den Namen eines Apps bekommst Du über die Manifest:
android:label="@string/app_name"

In den Strings kannst Du den Namen dann ändern.
Oder über this.setTitle("neuerName"); jeder aufgerufenen Seite einen neuen Titel geben.

Gruß
Duckemai
 

Ähnliche Themen

T
Antworten
6
Aufrufe
972
tefracky
T
F
Antworten
3
Aufrufe
763
Feuerstern
F
T
Antworten
2
Aufrufe
1.192
jogimuc
J
Zurück
Oben Unten