1. Nimm jetzt an unserem 2. ADVENT-Gewinnspiel teil - Alle Informationen findest Du hier!

R.drawable.variable laden

Dieses Thema im Forum "Android App Entwicklung" wurde erstellt von Chris92, 14.12.2010.

  1. Chris92, 14.12.2010 #1
    Chris92

    Chris92 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    0
    Registriert seit:
    01.10.2010
    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
     
  2. itso, 15.12.2010 #2
    itso

    itso Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    1
    Registriert seit:
    06.11.2010
    Phone:
    HTC Desire HD
    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
     
  3. DieGoldeneMitte, 15.12.2010 #3
    DieGoldeneMitte

    DieGoldeneMitte Android-Lexikon

    Beiträge:
    1,230
    Erhaltene Danke:
    256
    Registriert seit:
    05.02.2010
    Phone:
    Nexus 5X
    Tablet:
    Nexus 7 (2013)
    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
     
  4. Lilithian, 15.12.2010 #4
    Lilithian

    Lilithian Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    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);
     
  5. itso, 15.12.2010 #5
    itso

    itso Neuer Benutzer

    Beiträge:
    12
    Erhaltene Danke:
    1
    Registriert seit:
    06.11.2010
    Phone:
    HTC Desire HD
    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:
     
    Chris92 bedankt sich.
  6. Chris92, 15.12.2010 #6
    Chris92

    Chris92 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    0
    Registriert seit:
    01.10.2010
    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: 15.12.2010
  7. Lilithian, 15.12.2010 #7
    Lilithian

    Lilithian Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    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);
        }
       
    }
     
    Chris92 bedankt sich.
  8. Chris92, 15.12.2010 #8
    Chris92

    Chris92 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    0
    Registriert seit:
    01.10.2010
    Drawable muss klein geschrieben werden..., das war ja klar^^. Vielen Dank für deine Hilfe. Danke euch allen!

    MFG Chris92
     
  9. Lilithian, 15.12.2010 #9
    Lilithian

    Lilithian Android-Hilfe.de Mitglied

    Beiträge:
    69
    Erhaltene Danke:
    23
    Registriert seit:
    26.10.2010
    Meinst du bei einem String?
    Bei Strings kannst du einfach sowas machen:

    Code:
    String lowerCase = vorherigerString.toLowerCase();
     
  10. Chris92, 15.12.2010 #10
    Chris92

    Chris92 Threadstarter Android-Hilfe.de Mitglied

    Beiträge:
    123
    Erhaltene Danke:
    0
    Registriert seit:
    01.10.2010
    Jo weis habs schon herausgefunden... hab wieder mal zu kompliziert gedacht sry^^
    Danke trotzdem

    MFG Chris92
     
  11. Duckemai, 15.12.2010 #11
    Duckemai

    Duckemai Erfahrener Benutzer

    Beiträge:
    227
    Erhaltene Danke:
    6
    Registriert seit:
    05.04.2010
    Phone:
    Nexus
    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
     

Diese Seite empfehlen