我无论如何也找不出我做错了什么。所以这是代码,我的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;如您所见,此工具栏上的back按钮调用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{在按下back按钮,然后重新打开activity时,在存储vitTimeSet1时,TextView将保持为从未保存过。那么,您看到了哪些问题会阻止它被保存然后恢复呢?
编辑:后退按钮带你回到一个菜单(我为工具栏创建的后退按钮)。因此,当您按下它返回到上面的活动时,它会打开一个新实例,而不会被恢复。我在单击back按钮时调用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();
}
});它会打开一个新实例,但仍然没有保存任何值。它不会使用保存的值恢复旧实例。但是,如果单击back按钮终止此新实例,则会显示具有存储值的已保存实例。finish();似乎是唯一让它不这样做的方法,但它会杀死活动,所以可能不会保存东西。
发布于 2014-11-21 03:01:01
尽量不要使用finish()。根据http://developer.android.com/training/basics/activity-lifecycle/recreating.html
当您的活动由于用户按下Back或该活动自行完成而被销毁时,系统对该活动实例的概念将永远消失,因为该行为表明不再需要该活动。
编辑:当导航到新的活动,然后返回并恢复保存的状态时,活动实例最常被保存。再次启动相同的活动不应恢复到以前的状态,而应重新开始。
编辑:在每个任务必须支持同一活动的多个实例的情况下,可以在传递给startActivity的意图中发送状态包。
https://stackoverflow.com/questions/27047356
复制相似问题