我不能为我的生活弄清楚我做错了什么。所以这里是代码,我的onSaveInstanceState
根本就没有保存,所以为了简单起见我专注于一件事,试着让它工作,但仍然没有。
@Override
public void onSaveInstanceState(Bundle outState) {
// TODO Auto-generated method stub
super.onSaveInstanceState(outState);
outState.putString("test_time", vitTimeSet1.getText().toString());
}
只是让你们知道每个细节,我也有一个后退按钮,我用它来测试实例是否恢复。在这里。
public boolean onOptionsItemSelected(MenuItem item){
Intent myIntent = new Intent(getApplicationContext(), Tools.class);
startActivityForResult(myIntent, 0);
finish();
return true;
正如您所看到的,此工具栏后退按钮会调用finish();
,以便在您返回时不会运行此活动的多个实例。现在这里是onCreate
中的代码,它要求TextView
设置已保存字符串的文本。
protected void onCreate(Bundle outState) {
// TODO Auto-generated method stub
super.onCreate(outState);
if (outState != null){
vitTimeSet1.setText(outState.getString("test_time"));
}else{
按下后退按钮然后重新打开活动时,TextView会保留,就好像在存储vitTimeSet1
时从未保存过一样。那么你看到哪些问题会使其无法保存然后恢复?
编辑:
后退按钮将您带回菜单(我为工具栏创建的后退按钮)。因此,当您按此按钮返回上述活动时,它会打开一个新实例而不进行恢复。我在点击后退按钮时调用finish();
,所以如果我将其删除,则点击此按钮打开上面的活动时会完成所有操作
vitals = (Button) findViewById(R.id.vitals);
vitals.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
try{
Class goVitals = Class.forName("com.vexos.emspal.Vitals");
Intent goIntent = new Intent(Tools.this, goVitals);
startActivity(goIntent);
}catch(ClassNotFoundException e){
e.printStackTrace();
}
finish();
}
});
它会打开一个仍然没有保存值的新实例。它不会使用保存的值恢复旧实例。但是,如果您点击后退按钮来杀死这个新实例,它会显示带有存储值的已保存实例。 finish();
似乎是让它不这样做的唯一方法,但它会杀死活动,所以事情可能无法保存。
答案 0 :(得分:0)
尽量不要使用finish()。 根据{{3}}
当您的活动因用户按下Back或活动自行完成而被销毁时,系统对该Activity实例的概念将永远消失,因为该行为表明不再需要该活动。
编辑: 导航到新活动然后返回并恢复已保存状态时,最常保存活动实例。再次开始相同的活动不应该恢复以前的状态,而是重新开始。
编辑: 如果每个任务必须支持同一个Activity的多个实例,则可以在传递给startActivity的intent中发送状态包。