我正在开发一个非常基本的Android应用程序,每当我按下 Button 时,就会在 TextView 中添加一个数字。使用 onSaveInstanceState()和 onRestoreInstanceState()更改移动设备的方向时, TextView 中显示的数字也会保留。 em>函数。
问题 是方向更改时的值,该值保留,但是在按下按钮时更改方向后,它将再次从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"));
}
}
谢谢您的回复。
答案 0 :(得分:1)
您可以使用多种方法保存和获取数据
首先:如果数据很小,则可以使用onSavedInstanceState
和onRestoreInstanceState
..有关详细信息,请遵循this answer或this one >
第二,如果您要存储的数据太多,请改用ViewModel。 this是您可以开始的教程。
答案 1 :(得分:0)
添加
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"));
}
答案 2 :(得分:0)
问题是当方向改变时,值保留,但 更改后再次按下按钮时 再次定位,从0开始计数,然后再开始 从保存的值中获取
这是因为在更改配置后恢复counter
的值时,您将其设置为TextView
上的文本,但未将其设置为计数器变量。因此,当单击按钮时,它将采用counter
的先前值,即每次配置更改后的zero
,它将对其进行递增并将其设置为文本TextView
。
解决方案
在onRestoreInstanceState
方法内,添加以下语句
counter = Integer.parseInt(savedInstanceState.getString("my_text"));