2016-11-04 2 views
0

Ich versuche, eine Schaltfläche zu machen, die beim Anklicken eine zufällige Karte von einer Karte auswählt und sie in einem ImageView anzeigt. Um dies zu tun, habe ich eine Card-Klasse für ihren Wert und ihre ID (der Name der Image-Karte in Drawable).setImageResource verursacht einen Absturz der Anwendung

public class Carte { 

int valeur; 
static String nomCarte; 

public Carte(int valeur, String nomImage) { 

    valeur = this.valeur; 
    nomCarte = this.nomCarte; 
} 

public static String getImageId() { 
    return nomCarte; 
} 
} 

ich initialisieren 52 von ihnen in eine Registerkarte [], wenn die Schaltfläche Zieh geklickt wird es einen gelegentliche aus der Registerkarte pick [] und ich versuche, um dann mit dem Bild der Karte ist mein Image zu ändern gepflückt durch bekomme die ID der Karte ausgewählt und mit einer setImageResource, aber es meine Anwendung zum Absturz bringen können Sie mir da helfen?

Hier ist mein mainActivity Code:

public class MainActivity extends AppCompatActivity { 

protected Carte tab[]; 
protected ImageView imageCarte; 
protected Button afficherCarte; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_main); 

    imageCarte = (ImageView) findViewById(R.id.imageCarte); 

    tab = new Carte[]{new Carte(1, "c_1"), new Carte(1, "d_1"), new Carte(1, "h_1"), new Carte(1, "s_1"), 
        new Carte(2, "c_2"), new Carte(2, "d_2"), new Carte(2, "h_2"), new Carte(2, "s_2"), 
        new Carte(3, "c_2"), new Carte(3, "d_3"), new Carte(3, "h_3"), new Carte(3, "s_3"), 
        new Carte(4, "c_4"), new Carte(4, "d_4"), new Carte(4, "h_4"), new Carte(4, "s_4"), 
        new Carte(5, "c_5"), new Carte(5, "d_5"), new Carte(5, "h_5"), new Carte(5, "s_5"), 
        new Carte(6, "c_6"), new Carte(6, "d_6"), new Carte(6, "h_6"), new Carte(6, "s_6"), 
        new Carte(7, "c_7"), new Carte(7, "d_7"), new Carte(7, "h_7"), new Carte(7, "s_7"), 
        new Carte(8, "c_8"), new Carte(8, "d_8"), new Carte(8, "h_8"), new Carte(8, "s_8"), 
        new Carte(9, "c_9"), new Carte(9, "d_9"), new Carte(9, "h_9"), new Carte(9, "s_9"), 
        new Carte(10, "c_10"), new Carte(10, "d_10"), new Carte(10, "h_10"), new Carte(10, "s_10"), 
        new Carte(11, "c_11"), new Carte(11, "d_11"), new Carte(11, "h_11"), new Carte(11, "s_11"), 
        new Carte(12, "c_12"), new Carte(12, "d_12"), new Carte(12, "h_12"), new Carte(12, "s_12"), 
        new Carte(13, "c_13"), new Carte(13, "d_13"), new Carte(13, "h_13"), new Carte(13, "s_13"),}; 


    afficherCarte = (Button) findViewById(R.id.afficherCarte); 
    afficherCarte.setOnClickListener(new View.OnClickListener() { 
     @Override 
     public void onClick(View v) { 
      Random r = new Random(); 
      int i1 = r.nextInt(53 - 1) + 1; 
      int id = getResources().getIdentifier(tab[i1].getImageId(), "drawable", getPackageName()); 
      imageCarte.setImageResource(id); 
     } 
    }); 

} 

} 

Antwort

0

Ihr Konstruktor ist falsch und Sie haben ein statisches Feld auf Ihrem imageId, die immer die gleiche ID sein wird, wenn Sie es nicht entfernen.

public Carte(int valeur, String nomImage) { 
    valeur = this.valeur; 
    nomCarte = this.nomCarte; 
} 

Sie speichern den Methodenparameter nie in den Klassenfeldern. Sie haben es in die andere Richtung verwenden, um wie

this.valeur = valeur; 
this.nomCarte = nomCarte; 

Und Ihr Getter zurückkehrt null deswegen. Abgesehen davon, entfernen Sie den statischen Modifikator

public String getImageId() { 
    return nomCarte; 
} 
+0

Diese perfekt funktioniert, habe ich diese Datei bearbeiten versucht setImageResource richtig zu nutzen und complety vergessen hat, über die Bearbeitung i für die statischen gemacht hatte. Für den Konstrukteur war es ein grundlegender Fehler von mir, mein Schlechter. Danke vielmals ! – Rhohen

+0

@Rhohen Kein Problem. Vergessen Sie nicht, die Antwort zu akzeptieren. –

Verwandte Themen