我有一个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个按钮。
答案 0 :(得分:0)
已保存的实例状态是关于您的活动的键值对。文档清楚地表明它在应用程序关闭时被销毁。(按下后退按钮或系统本身关闭应用程序)。这仅在您在应用程序中导航或更改方向时才有用。
一种解决方案是创建应用程序所需的详细信息的共享首选项,以识别包含动态内容的给定结构。每当您打开应用程序和代码时,都会获取值。
其他解决方案是使用数据库或文件来存储有关动态内容的数据。
答案 1 :(得分:0)
只要存储String或Boolean ..每当您尝试在onRestoreInstanceState中使用它们,然后动态创建Button或任何东西,然后使用存储的String或boolean在其上设置文本