Hi
also das grau sagt das du die Variable zwar estellst aber nicht in deiner App verwendest.
wenn du zB. in der onCreate
GridLayout spielfeldLayout = (GridLayout)findViewById(R.id.spielfeldLayout);
Screibst ist das eine Lokale Variable die nur in der onCreate sichtbar ist.
Deine Vielleicht Global im KlassenRumf erstellet Variable hat den gleichen Namen ist aber nicht die gleiche Variable.
GridLayout spielfeldLayout;
Wenn du nun zb. im Onklick listner auf die Variable zugreifen willst, greifst du auf die globale nicht und lehre variable zu und deine App türtzt ab.
also erstelle am besten die Variable im Klassenrumpf global und Inizalisire sie in der onCreat ohne den VVariablen Typ anzugeben.
spielfeldLayout = (GridLayout)findViewById(R.id.spielfeldLayout);
somit kannst du von überall in der Klasse auf die Variable zugreifen.
dann wird sie auch nicht mehr grau sein.
Alles anzeigen
Moin moin,
ich habe das GrinLayout jetzt in der public class initialisiert.
GridLayout spielfeldLayout;
Die App startet einwandfrei.
Dementsprechend lautet der Befehl in der playAgain Methode jetzt:
spielfeldLayout = (GridLayout)findViewById(R.id.spielfeldLayout);
Allerdings ist hier das (GridLayout) ausgegraut und die App stürzt nach wie vor ab, wenn ich nochmal spielen möchte.
Habe ich das auch so umgesetzt wie es deine Lösung vorgibt? Evtl. habe ich ja etwas falsch verstanden?
Die angelegten Variablen in der public class:
public class TicTacToe_Code extends AppCompatActivity {
//Button onClick Methode Start
Button startbutton;
//Musik
Button music;
boolean hintergrundmusik;
MediaPlayer hintergrundmusik1 = new MediaPlayer();
//Spiel, 0: Chinese, 1: Marcel Davis, 2: leer
int spieler = 0;
int[] status = {2,2,2,2,2,2,2,2,2};
int[][] siegesbedingungen = {{0,1,2},{3,4,5},{6,7,8},{0,3,6},{1,4,7},{2,5,8},{0,4,8},{2,4,6}};
boolean spielAktiv = true;
Button playAgainButton;
TextView winnerTextView;
GridLayout spielfeldLayout;
Die komplette playAgain Methode:
//Erneut spielen
public void playAgain (View view){
playAgainButton.setVisibility(View.INVISIBLE);
winnerTextView.setVisibility(View.INVISIBLE);
spielfeldLayout = (GridLayout)findViewById(R.id.spielfeldLayout);
for (int i = 0; i < spielfeldLayout.getChildCount(); i++){
ImageView counter = (ImageView) spielfeldLayout.getChildAt(i);
counter.setImageDrawable(null);
}
for (int i = 0; i<status.length; i++){
status[i] = 2;
}
spieler = 0;
spielAktiv = true;
}
Ich weiß echt nicht weiter, alles andere funktoniert.