【发布时间】:2017-11-25 01:18:13
【问题描述】:
我在 Android Studio 中遇到了这个特殊问题。我制作了这个简单的应用程序,以了解屏幕旋转。我理解屏幕旋转时 Activity 被破坏的概念,并回忆起 onCreate 方法。为了保存数据,您必须通过覆盖 onSaveInstanceState 方法将其放入 Bundle 中。我制作了一个带有 2 个按钮和中间数字的应用程序。该数字将根据单击的按钮而变化。但是由于某种原因,当我旋转屏幕时,数字会重置,但仍然保持屏幕旋转之前的值。例如,如果我将数字设置为 5,然后旋转屏幕,数字会变为零,但是如果我增加它,它会变成 6,如果我减少它会变成 4。不知何故,它仍然保持其值但重置为零,我不知道为什么。这是代码
package com.example.android.application;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
Button upButton, downButton;
TextView amount;
int change;
private static final String banza = "Bundle";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
if (savedInstanceState != null) {
change = savedInstanceState.getInt(banza);
}
upButton = (Button) findViewById(R.id.activity_main_up_button);
downButton = (Button) findViewById(R.id.activity_main_down_button);
amount = (TextView) findViewById(R.id.activity_main_textview_id);
upButton.setOnClickListener(this);
downButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
if (view == upButton) {
change++;
amount.setText(Integer.toString(change));
}
if (view == downButton) {
change--;
amount.setText(Integer.toString(change));
}
}
@Override
protected void onSaveInstanceState(Bundle savedInstanceState) {
super.onSaveInstanceState(savedInstanceState);
savedInstanceState.putInt(banza, change);
}
}
【问题讨论】: