【问题标题】:onsaveInstancestate not saving int valuesonsaveInstancestate 不保存 int 值
【发布时间】:2017-07-21 22:23:05
【问题描述】:

当我尝试旋转屏幕时,它不会删除数据,但是当我从活动中返回并返回时,计数器值会回到 0。

我已经设置了保存数据的方法,但是还是不保存。这是为什么呢?

  package com.example.navjeevenmann.mytycoon;

  import android.content.Intent;
  import android.os.Bundle;
  import android.os.Handler;
 import android.support.v7.app.AppCompatActivity;
  import android.view.View;
   import android.widget.Button;
  import android.widget.TextView;


 public class MainActivity extends AppCompatActivity {
private Button myButton;
private int Counter = 0;
private Button myButton2;
private TextView myTextView;
Handler handler = new Handler();
private int add = 0;

@Override
protected void onCreate(final Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState != null) {
        Counter = savedInstanceState.getInt("Count");
        add = savedInstanceState.getInt("Add");
    }
    setContentView(R.layout.activity_main);
    myButton = (Button) findViewById(R.id.button);
    myButton2 = (Button) findViewById(R.id.button2);
    myTextView = (TextView) findViewById(R.id.textView);


    myButton.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Counter = ButtonCounter(Counter);
        }
    });
    myButton2.setOnClickListener(new View.OnClickListener() {
        @Override
        public void onClick(View view) {
            Intent intent = new Intent(getApplicationContext(), 
 SecondActivity.class);
            intent.putExtra("Count", Counter);
            startActivity(intent);
            finish();
        }

    });

    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            Counter = AutoCounter(Counter, add);
            Display(Counter, myTextView);
            handler.postDelayed(this, 100);
        }
    }, 10);


}

@Override
public void onSaveInstanceState(Bundle savedInstanceState) {
    savedInstanceState.putInt("Count", Counter);
    savedInstanceState.putInt("Add", add);

    super.onSaveInstanceState(savedInstanceState);
}


public int ButtonCounter(int Counter) {
    Counter += 1;
    return Counter;
}

public int AutoCounter(int Counter, int add) {
    Counter += add;
    return Counter;
}

public void Display(int Counter, TextView myTextView) {
    String man = String.valueOf(Counter);
    myTextView.setText("$" + man);
}


}

【问题讨论】:

  • 你说的“当我离开活动时”是什么意思?这是什么时候发生的?当您点击后退按钮或打开第二个活动时?
  • 开启第二个活动
  • 你在打开SecondActivity的时候调用了finish(),所以保存的实例状态包没有保存。此外,当您通过点击后退按钮关闭活动时,行为是相同的。 onSaveInstanceState 方法主要用于保存方向变化的数据。如果你想保存计数器,你可以考虑使用 SharedPreferences - developer.android.com/reference/android/content/…

标签: android savestate


【解决方案1】:

我的代码就是这样运行的……

@Override
protected void onSaveInstanceState(Bundle outState)
{
    super.onSaveInstanceState(outState);

    outState.putInt("Count", Counter);
}

@Override
protected void onCreate(Bundle savedInstanceState)
{
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    if (savedInstanceState != null)
    {
        if (savedInstanceState.containsKey("Count"))
        {
            Counter = savedInstanceState.getInt("Count");
        }
    }
}

不同之处在于我在创建时没有最终的 Bundle,我在 super.onSave 之后保存它.. 看起来很奇怪....

【讨论】:

    猜你喜欢
    • 2023-03-05
    • 2017-02-03
    • 1970-01-01
    • 1970-01-01
    • 2019-05-27
    • 1970-01-01
    • 2014-11-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多