当我旋转我的Android设备时,XML会更改回main.xml

时间:2012-11-12 18:49:27

标签: java android

我正在编写一个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的内容刷新活动。所以我可以让它做我想要的,但是当我旋转设备并在横向布局而不是典型的纵向布局中查看它时,它会恢复。

我该如何解决这个问题?

3 个答案:

答案 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上的文档以获取更多信息。