拯救国家的问题,极度难倒

时间:2014-11-20 18:55:06

标签: android save restore

我不能为我的生活弄清楚我做错了什么。所以这里是代码,我的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();似乎是让它不这样做的唯一方法,但它会杀死活动,所以事情可能无法保存。

1 个答案:

答案 0 :(得分:0)

尽量不要使用finish()。 根据{{​​3}}

  

当您的活动因用户按下Back或活动自行完成而被销毁时,系统对该Activity实例的概念将永远消失,因为该行为表明不再需要该活动。

编辑: 导航到新活动然后返回并恢复已保存状态时,最常保存活动实例。再次开始相同的活动不应该恢复以前的状态,而是重新开始。

编辑: 如果每个任务必须支持同一个Activity的多个实例,则可以在传递给startActivity的intent中发送状态包。