保存整个活动状态

时间:2015-04-27 03:35:33

标签: android android-layout android-activity savestate

我有一个Android应用,允许用户动态地将自己的按钮添加到布局中。我需要这样做,以便一旦应用程序关闭并重新打开,这个动态添加按钮将返回到布局。而不是加载默认布局。

目前,我正在通过App的ActionBar动态添加按钮:

    if (id == R.id.add_button) 
        {
        String string = "Adding Button in Progress";
        Toast.makeText(getApplicationContext(), string, Toast.LENGTH_SHORT).show( );

        Button myButton = new Button(this);
        myButton.setText("Button");

        RelativeLayout layout = (RelativeLayout)findViewById(R.id.Layout1);
        layout.addView(myButton);

        //myButton.setVisibility(View.VISIBLE);
        return true;    
        }

这样可以很好地创建Button,但是当关闭并重​​新打开应用程序时,它会启动默认布局。

我已经做过一些研究,让应用程序保存并重新加载更新的布局。似乎我需要使用onSaveInstanceState。到目前为止,这是我尝试保存布局的方法:

    @Override
    public void onSaveInstanceState(Bundle savedInstanceState) {
    // Save the app state here:
    savedInstanceState.putAll(savedInstanceState);

    super.onSaveInstanceState(savedInstanceState);
    }

这就是我在尝试“重新加载/恢复”所述布局方面所拥有的。注意我没有使用onRestoreInstanceState,而是通过onCreate方法进行:

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


    // Check whether we're recreating a previously destroyed instance
    if (savedInstanceState != null) {
        // Restore value of members from saved state
        //savedInstanceState.get(savedInstanceState);
        } 

    else 
        {
        //initialize members with default values for a new instance
        setContentView(R.layout.activity_main);
        }
    }

我不确定我是否正确保存/加载,但是对于如何完成此任务的任何建议将不胜感激。

谢谢你的时间!

P.S。我仍然是一个相当新的成员,因此我无法对现有主题发表评论/提问。

我知道有很多关于尝试加载/保存布局的信息,但在我的情况下,我需要它来保存Button,而不是一串用户文本。换句话说,它不是我需要保存的固定值。如果用户添加了n个按钮,当退出并重新启动应用程序时,它应该具有相同的3个按钮。

2 个答案:

答案 0 :(得分:0)

已保存的实例状态是关于您的活动的键值对。文档清楚地表明它在应用程序关闭时被销毁。(按下后退按钮或系统本身关闭应用程序)。这仅在您在应用程序中导航或更改方向时才有用。

一种解决方案是创建应用程序所需的详细信息的共享首选项,以识别包含动态内容的给定结构。每当您打开应用程序和代码时,都会获取值。

其他解决方案是使用数据库或文件来存储有关动态内容的数据。

答案 1 :(得分:0)

只要存储String或Boolean ..每当您尝试在onRestoreInstanceState中使用它们,然后动态创建Button或任何东西,然后使用存储的String或boolean在其上设置文本