我正在编写一个Android应用程序。我有两个重要的XML文件 - main.xml和new.xml。这是我的Java Activity源代码:
// package declarations, imports, etc
public class MainActivity extends Activity {
@Override
public void onCreate(savedInstanceState) {
super.onCreate(savedInstancestate);
setContentView(R.layout.main);
}
// as you can see, the content of the initial layout is found in main.xml
// I want to change the layout so it has the content of new.xml (when I press a button)
public void ButtonAction(View view) {
setContentView(R.layout.new);
}
}
所以它是这样的:在我的main.xml文件中,有一个按钮。正如main.xml文件中所指示的那样,当我按下该按钮时,它会调用ButtonAction方法。当按下按钮并调用ButtonAction时,我想将布局的内容更改为new.xml的内容。
上面的代码有效,但只是一种 - 它不是永久性的。当我旋转设备时,它似乎用main.xml的内容刷新活动。所以我可以让它做我想要的,但是当我旋转设备并在横向布局而不是典型的纵向布局中查看它时,它会恢复。
我该如何解决这个问题?
答案 0 :(得分:5)
当您旋转屏幕时,整个活动将被销毁并从头开始,包括使用onCreate()
致电setContentView(R.layout.main);
。您应该存储在变量中选择的最后一个布局,并使用以下命令加载此变量:
setContentView(lastLayout);
您需要覆盖onSaveInstanceState()
和onRestoreInstanceState()
以便在应用运行时记住布局选项。这种方法只是暂时的,因为当应用程序关闭时,这种状态会丢失
否则,您可以使用SharedPreferences(或类似数据库或通用文件之类的东西)来记住多个会话中的布局选择。
答案 1 :(得分:1)
使用onSaveInstanceState()保存活动的状态,并使用onRestoreInstanceState()来检索活动的状态。
在onStart()之后调用onRestoreInstanceState(),而在onStart()之前调用onCreate()。 onRestoreInstanceState()仅在操作系统被杀死后重新创建活动时被调用。 使用put方法在onSaveInstanceState()中存储值:protected void onSaveInstanceState(Bundle icicle) {
super.onSaveInstanceState(icicle);
icicle.putLong("param", value);
}
这是一个教程 http://www.androidcompetencycenter.com/tag/onrestoreinstancestate/
答案 2 :(得分:0)
只是为了澄清一下,如果您在横向或纵向中,Android首先在-land目录中查找布局文件,如果找不到它,则会检查默认布局目录。您的文件应按以下方式命名,并且系统将根据设备的当前配置在运行时加载:
res/layout/main.xml
res/layout-land/main.xml
查看Providing Resources上的文档以获取更多信息。