Datentypen Komm in einem Android Buch mit Java nicht weiter...

Jurow75

Mitglied
Hallo,
ich versuche seit Stunden, folgenden Code nachzuvollziehen, den ich nicht selbst geschrieben habe. Ich verstehe auch alles bis auf folgendes. Bei der Zeile mit dem Schlüsselwort switch steht in den Klammern ein Variablenaufruf vom Typ int. Verglichen wird dieser int allerdings über case mit Strings. Wie kann das funktionieren und was passiert hier? Bitte ich bin echt am Verzweifeln... Danke im Vorraus🙂




Code:
package com.thomaskuenneth.tierkreiszeichen;

import android.content.Context;

/**
* Diese Klasse speichert Informationen über ein Tierkreiszeichen:
* <ul>
* <li>erster Tag des Datumsbereichs, den es abdeckt</li>
* <li>Monat, in dem dieser Bereich beginnt</li>
* <li>eine Zahl, die das Sternzeichnen kennzeichnet</li>
* </ul>
* <p/>
* Die Methode {@link #getIdForDrawable()} liefert einen Wert, der für
* das Zeichnen des Tierkreiszeichens verwendet werden kann. Damit das
* funktioniert, muss das Sternzeichen aus {@code R.string} belegt
* werden.
*
* @author Thomas Künneth
* @see Zodiak
*/
final class Tierkreiszeichen {

    private final int tierkreiszeichen;

    // Wann ein Sternzeichen beginnt
    private final int tag, monat;

    Tierkreiszeichen(int tag, int monat, int tierkreiszeichen) {
        this.tag = tag;
        this.monat = monat;
        this.tierkreiszeichen = tierkreiszeichen;
    }

    int getTag() {
        return tag;
    }

    int getMonat() {
        return monat;
    }

    String getName(Context context) {
        return context.getString(tierkreiszeichen);
    }

    /**
     * Liefert einen Wert aus {@code R.drawable},
     * der für das Zeichnen des
     * Sternzeichens verwendet werden kann.
     *
     * @return Wert aus {@code R.drawable}
     */
    int getIdForDrawable() {
        switch (tierkreiszeichen) {
            case R.string.aquarius:
                return R.drawable.aquarius;
            case R.string.aries:
                return R.drawable.aries;
            case R.string.cancer:
                return R.drawable.cancer;
            case R.string.capricornus:
                return R.drawable.capricornus;
            case R.string.gemini:
                return R.drawable.gemini;
            case R.string.leo:
                return R.drawable.leo;
            case R.string.libra:
                return R.drawable.libra;
            case R.string.pisces:
                return R.drawable.pisces;
            case R.string.sagittarius:
                return R.drawable.sagittarius;
            case R.string.scorpius:
                return R.drawable.scorpius;
            case R.string.taurus:
                return R.drawable.taurus;
            case R.string.virgo:
                return R.drawable.virgo;
            default:
                return R.drawable.ic_launcher;
        }
    }
}
 
Es wird nicht mit Strings verglichen - das ist nur etwas irritierend.
Jede Ressource in Android - egal ob es eine String-Ressource, Drawable-Ressource, Color-Ressource oder was auch immer ist - bekommt in Android eine eindeutige ID. R.string.aries liefert dir also nicht den String zurück sondern die ID des Strings.
 
Hast du dafür mal ein Code Beispiel? Denn wie du bereits erkannt hast kann das eigentlich nicht funktionieren. Ist zwar schon ne Weile her als ich mich mit Android beschäftig habe, aber da war es halt so, dass die Resourcen IDs der generierten R.java Klasse in etwa so aussahen:
Code:
public final class R {
    public static final class string {
        public static final int menu_bearbeiten = 0x7f050009;
        public static final int menu_datei = 0x7f050034;
        public static final int menu_senden = 0x7f05005c;
    }
}
 
Vielen Dank, aber das ganze Problem hat sich schon geklärt. Der int namens tierkreiszeichen wird in einer anderen Klasse über den Konstruktor mit ebenfalls diesen Strings bzw String IDs initialisiert. Was bedeutet, dass mir der Wert total egal sein kann, da lediglich so die Strings und Objekte auf ihre Übereinstimmung geprüft werden.@X5-599
 

Zurück
Oben