【问题标题】:onSaveInstanceState not getting variable after onCreateonSaveInstanceState 在 onCreate 之后没有得到变量
【发布时间】:2015-07-06 13:04:37
【问题描述】:

您好,谁能解释一下我做错了什么,因为我无法从 savedInstanceState 中获取变量,int "score" 每次我更改屏幕方向时都会重置变量。

int score;
EditText et;
String etString;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    et = (EditText) findViewById(R.id.editText);
    if (savedInstanceState != null) {
        score = savedInstanceState.getInt("score");
        et.setText(savedInstanceState.getString("etText"));
        Log.d("TEST2", "score " + score);
    } else {
        score = 0;
    }

}

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    super.onSaveInstanceState(outState, outPersistentState);

    etString = et.getText().toString();
    outState.putString("etText", etString);
    outState.putInt("score", score);
    Log.d("TEST", "score " + score);
}

public void performAction(View v) {
    switch (v.getId()) {
    case R.id.button:
        score += 1;
        break;
    case R.id.button2:
        Toast.makeText(getApplicationContext(), "Score: " + score, Toast.LENGTH_LONG).show();
        break;
    }

}

如果您知道解决方案,请提供帮助。

【问题讨论】:

  • 分数 = 0;更改屏幕方向后;即使我增加了它,它也更高了。

标签: java android variables


【解决方案1】:

您使用的是来自 Lollipop 的方法,请更改为自 Android 1.0 起可用的版本

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

看到不同的方法签名了吗?

【讨论】:

  • 将其更改为:@Override protected void onCreate(Bundle outState) { super.onCreate(outState); setContentView(R.layout.activity_main); et = (EditText) findViewById(R.id.editText); if (outState != null) { score = outState.getInt("score"); et.setText(outState.getString("etText")); Log.d("TEST2", "score" + score); } 其他 { 分数 = 0; } } 还是什么都没有
  • @John 你看到 Budius 让你做出的改变了吗?从您在此处的评论来看,您更改了错误的方法。再次阅读答案并更改正确的代码,然后告诉我们。
  • @John 再次阅读。您应该更改onSavedInstanceState 方法。
  • 哦,对不起,我有点分心,没有注意到。
  • 顺便说一句,有没有办法使用棒棒糖中的方法并仍然保存变量?
【解决方案2】:

您应该实现onRestoreInstanceState,而不是在onCreate 中获取价值。只有当有保存的状态需要恢复时系统才会调用onRestoreInstanceState(),所以不需要检查Bundle是否为null。

【讨论】:

  • 这与问题无关。确实,它只是在需要恢复的情况下才被调用,但同样的值也会传递给 onCreate 并且代码 if(savedInstanceState!=null) 没有任何问题
【解决方案3】:
public class OrientationChangeActivity extends Activity {

private EditText edtUser;

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

    edtUser = (EditText) findViewById(R.id.edtUsername);



    if (savedInstanceState != null /*&& savedInstanceState.getString("edt") != null*/) {
        edtUser.setText(savedInstanceState.getString("edt"));
        Log.e("Demo","==================================="+savedInstanceState.getString("edt"));
    }
}

@Override
protected void onSaveInstanceState(Bundle outState) {
    outState.putString("edt", edtUser.getText().toString());
    super.onSaveInstanceState(outState);
}

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-06
    • 1970-01-01
    相关资源
    最近更新 更多