【问题标题】:Recreating activity state after clicking back button单击后退按钮后重新创建活动状态
【发布时间】:2016-03-03 18:43:18
【问题描述】:

当我在 onSaveInstanceState 方法中成功将数据保存到 Bundle 时,我不知道为什么 saveInstanceState 在 onCreate 方法中始终为空。 当我在 AVD 上运行我的程序并单击后退按钮(破坏活动)然后通过单击其图标再次创建它时,保存的状态始终为空。 这是一个测试这个问题的简单程序。

package com.example.myTestApp;

import android.app.Activity;
import android.os.Bundle;
import android.widget.Button;

public class MyActivity extends Activity {
    /**
     * Called when the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        Button button = (Button)findViewById(R.id.button);
        if(savedInstanceState == null){
            button.setText("No");
        }else{
            button.setText("Yes");
        }
    }

    static final String STATE_SCORE = "playerScore";
    static final String STATE_LEVEL = "playerLevel";
    private int mCurrentScore = 1;
    private int mCurrentLevel = 2;


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

        savedInstanceState.putInt(STATE_SCORE, mCurrentScore);
        savedInstanceState.putInt(STATE_LEVEL, mCurrentLevel);

    }
}

如果可能的话,告诉我如何解决这个问题。

【问题讨论】:

    标签: android


    【解决方案1】:

    这是意料之中的。当您按下返回时,Activity 被破坏并且它拥有的数据丢失。在此之后,当您重新打开应用程序时,您将始终在捆绑包中获得 null,因为正在创建一个新的、全新的实例。

    当由于某些变化(如旋转)或因为它在后台暂停很长时间而重新创建 Activity 时使用 Bundle savedInstanceState。

    如果您想保留一些数据,请考虑将 SharedPreferences 用于小型数据,或者考虑使用数据库(SQLite、Realm)或文件用于大型数据。

    【讨论】:

    • 那么在这种情况下我该如何存储数据呢?
    • 在 SharedPreferences 中保留数据。
    • 别忘了标记为已解决,这是感谢帮助的一种方式;)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多