方向改变时保持价值
Preserving Value When Orientation Changes
我正在开发一个非常基本的 Android 应用程序,每当我点击 按钮 时,它就会在 TextView 中添加一个数字。当使用 onSaveInstanceState() 移动设备的方向更改 时,TextView 中显示的数字也会被保留和 onRestoreInstanceState() 函数。
问题是当方向改变值保留 但当 按钮在改变方向后再次按下时,它会再次从 0 开始计数,而不是从保留的值开始计数。
我的代码:
public class MainActivity extends AppCompatActivity {
TextView showValue;
int counter=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showValue = (TextView) findViewById(R.id.CounterValue);
}
public void countIN(View view)
{
counter++;
showValue.setText(Integer.toString(counter));
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("my_text", showValue.getText().toString());
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
showValue.setText(savedInstanceState.getString("my_text"));
}
}
感谢您的回复。
添加
counter=Integer.parseInt(savedInstanceState.getString("my_text"));
onRestoreInstanceState 方法内部
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
showValue.setText(savedInstanceState.getString("my_text"));
counter=Integer.parseInt(savedInstanceState.getString("my_text"));
}
您可以使用多种方法保存和获取数据
首先 如果你的数据很小,那么你可以使用onSavedInstanceState
和onRestoreInstanceState
..详情请看this answer or this one
其次如果你要存储的数据太多,那就用ViewModel代替; this 是您可以从中开始的教程。
我正在开发一个非常基本的 Android 应用程序,每当我点击 按钮 时,它就会在 TextView 中添加一个数字。当使用 onSaveInstanceState() 移动设备的方向更改 时,TextView 中显示的数字也会被保留和 onRestoreInstanceState() 函数。
问题是当方向改变值保留 但当 按钮在改变方向后再次按下时,它会再次从 0 开始计数,而不是从保留的值开始计数。
我的代码:
public class MainActivity extends AppCompatActivity {
TextView showValue;
int counter=0;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
showValue = (TextView) findViewById(R.id.CounterValue);
}
public void countIN(View view)
{
counter++;
showValue.setText(Integer.toString(counter));
}
@Override
protected void onSaveInstanceState(Bundle outState) {
outState.putString("my_text", showValue.getText().toString());
super.onSaveInstanceState(outState);
}
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
showValue.setText(savedInstanceState.getString("my_text"));
}
}
感谢您的回复。
添加
counter=Integer.parseInt(savedInstanceState.getString("my_text"));
onRestoreInstanceState 方法内部
@Override
protected void onRestoreInstanceState(Bundle savedInstanceState) {
super.onRestoreInstanceState(savedInstanceState);
showValue.setText(savedInstanceState.getString("my_text"));
counter=Integer.parseInt(savedInstanceState.getString("my_text"));
}
您可以使用多种方法保存和获取数据
首先 如果你的数据很小,那么你可以使用onSavedInstanceState
和onRestoreInstanceState
..详情请看this answer or this one
其次如果你要存储的数据太多,那就用ViewModel代替; this 是您可以从中开始的教程。