Не считается и сбивается счётчик
Обычный кликер, который, при нажатии на кнопку, считает количество кликов, но, при запуске этого кода возникли 2 проблемы:
- Не работает счётчик, но, если убрать 37-40 строчки, то всё опять считает.
- При повороте экрана сбрасывается счётчик, хотя все методы для его сохранения есть.
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.text.Layout;
import android.view.View;
import android.view.ViewGroup;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.app.Activity;
import android.view.Menu;
import android.widget.Toast;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
private Integer counter = 0;
private Integer counter2 = 100;
public static final String TAG = "StartActivity";
private Integer count = 5;
Button plus_ruble;
TextView balance;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
plus_ruble = (Button) findViewById(R.id.plus_ruble);
balance = (TextView) findViewById(R.id.balance);
Plus_ruble();
TextView counterView = (TextView) findViewById(R.id.balance);
counterView.setText(counter.toString());
setContentView(R.layout.activity_main);
Toast.makeText(this, "onCreate()", Toast.LENGTH_LONG).show();
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
}
@Override
public void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
if (savedInstanceState != null &&
savedInstanceState.containsKey("count")) {
count = savedInstanceState.getInt("count");
}
Log.d(TAG, "onRestoreInstanceState");
}
@Override
public void onRestart(){
super.onRestart();
Log.d(TAG, "onRestart");
}
@Override
public void onStart(){
super.onStart();
Log.d(TAG, "onStart");
resetUI();
}
@Override
public void onResume(){
super.onResume();
Log.d(TAG, "onResume");
}
@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt("count", count);
Log.d(TAG, "onSaveInstanceState");
}
@Override
public void onPause(){
super.onPause();
Log.d(TAG, "onPause");
}
@Override
public void onStop(){
super.onStop();
Log.d(TAG, "onStop");
}
@Override
public void onDestroy(){
super.onDestroy();
Log.d(TAG, "onDestroy");
}
private void resetUI() {
((TextView) findViewById(R.id.balance)).setText(counter.toString());
Log.d(TAG, "resetUI");
}
public void onClickBtnAddRuble(TextView textView) {
counter++;
TextView counterView = (TextView) findViewById(R.id.balance);
counterView.setText(counter.toString());
if(counter >= 1){
TextView layout = findViewById(R.id.balance);
ViewGroup.LayoutParams params = layout.getLayoutParams();
params.height = 100;
params.width = 150;
layout.setLayoutParams(params);
}
if(counter >= 4){
TextView layout = findViewById(R.id.balance);
ViewGroup.LayoutParams params = layout.getLayoutParams();
params.height = 200;
params.width = 300;
layout.setLayoutParams(params);
}
}
void Plus_ruble() {
plus_ruble.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
counter += counter2;
balance.setText(counter + "");
}
});
}
}
Ответы (1 шт):
Автор решения: Vitaliy Martynyuk
→ Ссылка
Чтобы не сбивался счетчик добавьте в Manifest в тег вашего <activity/> строчку android:configChanges="orientation" Оно должно выглядеть примерно так:
<activity
android:name=".MainActivity"
android:configChanges="orientation" />
Дело в том, что при смене ориентации устройства активность перезапускается, а этот код не дает ей перезапускаться.