Yes, i have read many other posts, but i am unable to follow along because i have lots of variables, Not just One or Two.
I am making an app(TIC TAC TOE) for first time with landscape support. I am losing data on screen rotation.
package com.netlify.krupesh.tictactoe;
import android.graphics.Typeface;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.ImageView;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
// 0 for zero and 1 for X
// 2 for empty
boolean gameActive = true;
int[] gameState = {2,2,2,2,2,2,2,2,2};
int[][] winningPositions = {{0,1,2}, {3,4,5}, {6,7,8}, {0,3,6}, {1,4,7}, {2,5,8}, {0,4,8}, {2,4,6}};
int activePlayer = 0;
int[] playerScores = {0,0};
// Show Symbol on Tap
public void showSymbol(View view){
// Set Player Scores
TextView player1 = (TextView) findViewById(R.id.p1Score);
TextView player2 = (TextView) findViewById(R.id.p2Score);
player1.setText(playerScores[0]+"");
player2.setText(playerScores[1]+"");
// Get Symbol Info
ImageView symbol = (ImageView) view;
int tappedSymbol = Integer.parseInt(symbol.getTag().toString());
// Update Game state Array
if(gameState[tappedSymbol]==2 && gameActive) {
gameState[tappedSymbol] = activePlayer;
// Show Symbol with Animation
symbol.setAlpha(0f);
if (activePlayer == 0) {
symbol.setImageResource(R.drawable.zero);
activePlayer = 1;
showCurrentPlayer(2);
} else {
symbol.setImageResource(R.drawable.cross);
activePlayer = 0;
showCurrentPlayer(1);
}
symbol.animate().alpha(1).setDuration(400);
checkDraw(gameState);
for (int[] winningPosition : winningPositions) {
if (gameState[winningPosition[0]] == gameState[winningPosition[1]] && gameState[winningPosition[1]] == gameState[winningPosition[2]] && gameState[winningPosition[0]] != 2) {
showCurrentPlayer(0);
// Pause The Game
gameActive = false;
// Won the Game
String winningPlayer ;
if (gameState[winningPosition[0]] == 0) winningPlayer = "Player 1";
else winningPlayer = "Player 2";
Toast.makeText(this, winningPlayer + " won!", Toast.LENGTH_SHORT).show();
// Update Scores
playerScores[gameState[winningPosition[0]]]++;
player1.setText(playerScores[0] + "");
player2.setText(playerScores[1] + "");
}
}
}
}
public void resetBoard(View view){
android.support.v7.widget.GridLayout board = (android.support.v7.widget.GridLayout)findViewById(R.id.gridLayout);
for(int i=0; i<board.getChildCount(); i++) {
ImageView symbol = (ImageView) board.getChildAt(i);
symbol.setImageDrawable(null);
}
for(int i=0; i<gameState.length; i++ ){
gameState[i] = 2;
}
gameActive = true;
activePlayer = 0;
showCurrentPlayer(1);
}
public void checkDraw(int[] gamestate){
for(int i =0; i<gamestate.length; i++){
if(gamestate[i]==2){
return;
}
}
showCurrentPlayer(0);
Toast.makeText(this, "Match Draw!", Toast.LENGTH_SHORT).show();
}
public void resetAll(View view){
resetBoard(view);
playerScores[0]=0; playerScores[1]=0;
TextView player1 = (TextView) findViewById(R.id.p1Score);
TextView player2 = (TextView) findViewById(R.id.p2Score);
player1.setText(playerScores[0] + "");
player2.setText(playerScores[1] + "");
showCurrentPlayer(1);
}
public void showCurrentPlayer(int i){
TextView player1Heading = (TextView) findViewById(R.id.subheading1);
TextView player2Heading = (TextView) findViewById(R.id.subheading2);
if(i==1){
player1Heading.setTextColor(getResources().getColor(R.color.colorPlayer1));
player1Heading.setTypeface(null, Typeface.BOLD);
player2Heading.setTextColor(getResources().getColor(R.color.colorHeading));
player2Heading.setTypeface(null, Typeface.NORMAL);
}
if(i==2){
player2Heading.setTextColor(getResources().getColor(R.color.colorPlayer2));
player2Heading.setTypeface(null, Typeface.BOLD);
player1Heading.setTextColor(getResources().getColor(R.color.colorHeading));
player1Heading.setTypeface(null, Typeface.NORMAL);
}
if(i==0){
player1Heading.setTextColor(getResources().getColor(R.color.colorHeading));
player1Heading.setTypeface(null, Typeface.NORMAL);
player2Heading.setTextColor(getResources().getColor(R.color.colorHeading));
player2Heading.setTypeface(null, Typeface.NORMAL);
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ===================== Hide Status Bar ========================== //
requestWindowFeature(Window.FEATURE_NO_TITLE);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
// ================================================================ //
setContentView(R.layout.activity_main);
showCurrentPlayer(1);
}
}
See, there are so many things.. For all ImageViews i need to save who have their images set. Now how do i solve this problem of rotation??
Solution with Code Snippet to be added is what will prove helpful the most, New to Android Development