[Java / Android] Variablen und Text kombinieren - möglich?
lima-city → Forum → Programmiersprachen → Java
austauschen
bedingung
bild
code
ertrag
farbe
feld
grafik
hand
image
laden
manager
mann
methode
not
parameter
schleife
stein
warnung
zeile
-
ho ;)
Vielleicht hat meine Frage nicht unbedingt etwas mit Android zu tun, und dafür eher mit Java. (Meine Kenntnisse über diese Sprache sind noch sehr gering.)
Ich Code gerade an einer Android App, und muss für eine grafische Umsetzung immer wieder Grafiken austauschen.
Dies sieht Code-Technisch unter anderem so aus:
ImageView image; image = (ImageView) findViewById(R.id.grafik1); image.setImageResource(MeineApp.R.drawable.meineGrafik1);
Es wird also aus der XML File das Bild mit der ID "grafik1" gesucht, und (z.B. in diesem Beispiel) mit dem Bild "meineGrafik1.jpg" ausgetauscht.
Bei vielen Grafiken, und Abfragen, unter welchen Umständen welche Grafik verwendet werden soll, wird diese Methode zum Tauschen eines Bildes allerdings sehr mühsam. Meine Frage ist, ob ich das auch dynamisch bzw. variabel machen kann.
Bei JavaScript geht es z.B. dass ich einen Parameter so übergeben könnte:
meineFunktion("FixTeil"+intVariable);
Allerdings ist JS "nur" eine Scriptsprache. Geht so etwas (auf ähnliche Weise) auch in Java?
Wenn ich also 100 Grafiken habe, muss ich nicht mehr 200 Zeilen dafür Coden, sondern nur mehr eine Schleife und ein paar if's, um mir meine Bilder-ID's und Bilder-Namen zu generieren, und auszutauschen...
Vielen Dank schon im Voraus :)
Sincer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Du kannst hier doch genauso einen Parameter bestehend aus einem Festteil und aus einer Variable an einer Methode übergeben.
Edit: Mit genauso meine ich übrigens auch genauso: Verwende das Pluszeichen als Verkettungsoperator.
Beitrag zuletzt geändert: 23.8.2010 22:55:09 von das-koenigreich -
ho ;)
Das wollte ich auch, aber leider ging es nicht...
Gescheiterte Versuche:
int var = 1; image = (ImageView) findViewById(R.id.grafik+var); // <- Warnung: grafik cannot be resolved or is not a field image = (ImageView) findViewById(R.id."grafik"+var); // Error image = (ImageView) findViewById(R.id.'grafik'+var); // Error image = (ImageView) findViewById("R.id.grafik"+var); // <- Warnung: The method findViewById(int) in the type Activity is not applicable for the arguments (String) image = (ImageView) findViewById(R.id.grafik.var); // Error
Mach ich etwas falsch, oder geht es einfach bei dieser Methode (findViewById) nicht?
Gibt es noch eine andere Möglichkeit mein Zeil (oder etwas gleichwertiges) zu erreichen?
lg
Sincer -
Nein, das ist alles Quatsch.
Was du versuchst geht einfach nicht, es muss einen anderen Weg geben, ein bild dynamisch zu laden.
Den gibt es sogar, ich hab mich auch mal ne Weile mit Android Entwicklung beschäftigt, aber ich kann das jetzt nicht nachprüfen.
Such mal nach Resource Manager oder nur resourcen, etc.
Ansonsten ertrags wie ein Mann und schreibs von Hand :P
Kurz noch: willst du beim Start des Programms eine Schleife verwenden um den ImageViews die ganzen Bilder zuzuweisen(die schon im drawable ordner sind) oder willst du z.B. den User ein Bild auswählen lassen und das dann laden? -
benutzernaemelchen schrieb:
Nein, das ist alles Quatsch.
Was du versuchst geht einfach nicht, es muss einen anderen Weg geben, ein bild dynamisch zu laden.
Hab mich ein bisschen rum gespielt, und ein Workaround für mein Problem gefunden :)
// Initialisierung - Spielfeld von 4-Gewinnt ist 7*6 public ImageView[][] img = new ImageView[6][7]; // XML-ID's zuweisen: img[0][0] = (ImageView) findViewById(R.id.y0x0); img[0][1] = (ImageView) findViewById(R.id.y0x1); img[0][2] = (ImageView) findViewById(R.id.y0x2); // ...usw... // Schleife, um den Rest nicht manuell Coden zu müssen: for(int y = 0; y <= 5; y++) { for(int x = 0; x <= 6; x++) { img[y][x].setImageResource(meineApp.R.drawable.meineWunschGrafik); } }
Das kann ich dann ja umlegen, wie ichs brauche, mit Bedingungen usw... Erspart mir im Endeffekt eine Menge Arbeit :P
Such mal nach Resource Manager oder nur resourcen, etc.
Ich habe auf diese Weise sogar einen Post von jemanden gefunden, der genau das gleiche erreichen wollte wie ich... Er hat aber keine wirklich brauchbare Antwort bekommen xD
Ansonsten ertrags wie ein Mann und schreibs von Hand :P
Darfst gerne den Sekretär machen ^^
(GoGoGo, nur noch 400 Zeilen Deppen-Arbeit...)
Kurz noch: willst du beim Start des Programms eine Schleife verwenden um den ImageViews die ganzen Bilder zuzuweisen(die schon im drawable ordner sind) oder willst du z.B. den User ein Bild auswählen lassen und das dann laden?
Keins von beiden, ich arbeite an einem Vier Gewinnt, und tausche (fürs erste) die Farben der Felder aus. D.h. am Anfang ist es ein weißes Feld, und wenn man einen Stein einwirft, wird das Feld (je nach Spieler) rot oder gelb.
Soweit so gut, ist ja "nur" ein 6*7 Feld, d.H. 42 Bilder, die man je nach dem austauschen muss.
Jetzt will ich aber, dass nachdem jemand gewonnen hat, die Gewinner-Reihe optisch hervorgehoben wird. D.h. Alle zuvor roten Steine werden dunkelrot, alle gelbe Steine werden dunkelgelb, die weißen werden grau, und nur die Steine, die gewonnen haben, verändern die Farbe nicht (und stechen dadurch hervor)... Kannst dir selbst ausrechnen, wie viele Zeilen das sind, unter welchen Bedingungen welche Grafik durch welche ersetzt wird, wenn man das alles per Hand, und nicht mit einer Schleife codet :P
(Mit meinem Workaround geht's dann doch etwas einfacher :D )
lg && danke
Sincer
Beitrag zuletzt geändert: 24.8.2010 14:50:18 von sincer -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage