Почему при повороте экрана пропадает прогресс в активити?
Друзья прошу помощи) При повороте экрана пропадает прогресс активити, так же когда перехожу в другое активити и обратно - тоже пропадает прогресс, что нужно исправить или сделать? спасибо
package com.example.testappv1;
import androidx.annotation.NonNull;
import androidx.appcompat.app.AppCompatActivity;
import androidx.constraintlayout.widget.ConstraintLayout;
import android.annotation.SuppressLint;
import android.content.Intent;
import android.os.Bundle;
import android.os.Parcelable;
import android.os.PersistableBundle;
import android.view.View;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
private ImageView upgrade_img;
private static ImageView men_level_img;
private ProgressBar progressBar;
private ConstraintLayout baseFonClicker;
private TextView money_text;
private TextView level_text;
private static int countMoney = 0;
private static int countProgress = 0;
private static int countLevel = 1;
@SuppressLint("SetTextI18n")
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
upgrade_img = (ImageView) findViewById(R.id.upgrade_img);
men_level_img = (ImageView) findViewById(R.id.men_level_img);
progressBar = (ProgressBar) findViewById(R.id.progressBar);
progressBar.setMax(10000);
money_text = (TextView) findViewById(R.id.money_text);
money_text.setText("Монеты: " + countMoney);
level_text = (TextView) findViewById(R.id.level_text);
level_text.setText("Уровень: " + countLevel);
baseFonClicker = (ConstraintLayout) findViewById(R.id.basefonclicker);
baseFonClicker.setOnClickListener(new View.OnClickListener() {
@SuppressLint("SetTextI18n")
@Override
public void onClick(View view) {
if (countLevel == 1) { LevelOne(); }
if (countLevel == 2) { LevelTwo(); }
if (countLevel == 3) { LevelThree(); }
if (countLevel == 4) { LevelFour(); }
if (countLevel == 5) { LevelFive(); }
if (countLevel == 6) { LevelSix(); }
if (countLevel == 7) { LevelSeven(); }
if (countLevel == 8) { LevelEight(); }
if (countLevel == 9) { LevelNine(); }
if (countLevel == 10) { LevelTen(); }
}
});
upgrade_img.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, UpgradeActivity.class);
intent.putExtra("level", level_text.getText());
intent.putExtra("money", money_text.getText());
startActivity(intent);
}
});
}
@SuppressLint("SetTextI18n")
private void postProgress(int progress) {
progressBar.setProgress(progress);
if (progressBar.getProgress() >= progressBar.getMax()) {
progressBar.setProgress(0);
countProgress = 0;
countLevel++;
}
}
@SuppressLint("SetTextI18n")
private void LevelOne() {
level_text.setText("Уровень: " + countLevel);
countMoney++;
countProgress = countProgress + 1000;
postProgress(countProgress);
money_text.setText("Монеты: " + countMoney);
}
@SuppressLint("SetTextI18n")
private void LevelTwo() {
level_text.setText("Уровень: " + countLevel);
men_level_img.setImageResource(R.drawable.bb2l);
countMoney = countMoney + 2;
countProgress = countProgress + 900;
postProgress(countProgress);
money_text.setText("Монеты: " + countMoney);
}
@SuppressLint("SetTextI18n")
private void LevelThree() {
level_text.setText("Уровень: " + countLevel);
men_level_img.setImageResource(R.drawable.bb3l);
countMoney = countMoney + 3;
countProgress = countProgress + 800;
postProgress(countProgress);
money_text.setText("Монеты: " + countMoney);
}
@SuppressLint("SetTextI18n")
private void LevelFour() {
level_text.setText("Уровень: " + countLevel);
men_level_img.setImageResource(R.drawable.bb4l);
countMoney = countMoney + 4;
countProgress = countProgress + 700;
postProgress(countProgress);
money_text.setText("Монеты: " + countMoney);
}
@SuppressLint("SetTextI18n")
private void LevelFive() {
level_text.setText("Уровень: " + countLevel);
men_level_img.setImageResource(R.drawable.bb5l);
countMoney = countMoney + 5;
countProgress = countProgress + 600;
postProgress(countProgress);
money_text.setText("Монеты: " + countMoney);
}
@SuppressLint("SetTextI18n")
private void LevelSix() {
level_text.setText("Уровень: " + countLevel);
men_level_img.setImageResource(R.drawable.bb6l);
countMoney = countMoney + 6;
countProgress = countProgress + 500;
postProgress(countProgress);
money_text.setText("Монеты: " + countMoney);
}
@SuppressLint("SetTextI18n")
private void LevelSeven() {
level_text.setText("Уровень: " + countLevel);
men_level_img.setImageResource(R.drawable.bb7l);
countMoney = countMoney + 7;
countProgress = countProgress + 400;
postProgress(countProgress);
money_text.setText("Монеты: " + countMoney);
}
@SuppressLint("SetTextI18n")
private void LevelEight() {
level_text.setText("Уровень: " + countLevel);
men_level_img.setImageResource(R.drawable.bb8l);
countMoney = countMoney + 8;
countProgress = countProgress + 300;
postProgress(countProgress);
money_text.setText("Монеты: " + countMoney);
}
@SuppressLint("SetTextI18n")
private void LevelNine() {
level_text.setText("Уровень: " + countLevel);
men_level_img.setImageResource(R.drawable.bb9l);
countMoney = countMoney + 9;
countProgress = countProgress + 200;
postProgress(countProgress);
money_text.setText("Монеты: " + countMoney);
}
@SuppressLint("SetTextI18n")
private void LevelTen() {
level_text.setText("Уровень: " + countLevel);
men_level_img.setImageResource(R.drawable.bb10l);
countMoney = countMoney + 10;
countProgress = countProgress + 100;
postProgress(countProgress);
money_text.setText("Монеты: " + countMoney);
}
@Override
public void onSaveInstanceState(@NonNull Bundle outState) {
super.onSaveInstanceState(outState);
outState.putInt("countLevel", countLevel);
outState.putInt("countProgress", countProgress);
outState.putInt("countMoney", countMoney);
}
@Override
protected void onRestoreInstanceState(@NonNull Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
countLevel = savedInstanceState.getInt("countLevel");
countProgress = savedInstanceState.getInt("countProgress");
countMoney = savedInstanceState.getInt("countMoney");
levelPicture(countLevel);
}
void levelPicture(int countLevel) {
if (countLevel == 1) {
men_level_img.setImageResource(R.drawable.bb1l);
} else if (countLevel == 2) {
men_level_img.setImageResource(R.drawable.bb2l);
} else if (countLevel == 3) {
men_level_img.setImageResource(R.drawable.bb3l);
} else if (countLevel == 4) {
men_level_img.setImageResource(R.drawable.bb4l);
} else if (countLevel == 5) {
men_level_img.setImageResource(R.drawable.bb5l);
} else if (countLevel == 6) {
men_level_img.setImageResource(R.drawable.bb6l);
} else if (countLevel == 7) {
men_level_img.setImageResource(R.drawable.bb7l);
} else if (countLevel == 8) {
men_level_img.setImageResource(R.drawable.bb8l);
} else if (countLevel == 9) {
men_level_img.setImageResource(R.drawable.bb9l);
} else if (countLevel == 10) {
men_level_img.setImageResource(R.drawable.bb10l);
}
}
}
Ответы (1 шт):
Всякий раз при смене конфигурации (в том числе и повороте экрана) активити пересоздается заново. И все методы жизненного цикла вызываются заново. Вам необходимо обрабатывать эти кейсы. Здесь есть несколько кейсов:
метод
savedInstanceState()- в него вы можете положить простые данные вроде строки или числа и при пересоздании активити эти данные можно получить из бандла вonCreate().хранить данные в сущностях которые переживают жизненый цикл активити и при каждом пересоздании получать данные из них. К примеру если у вас есть список заказов, передавать его через
savedInstanceState()очень плохая практика. У вас может быть база данных в которую активити будет ходить всякий раз при пересоздании.
Более подробно в документации.