0

我正在编写一个 Android 应用程序。我有两个重要的 XML 文件 - main.xml 和 new.xml。这是我的 Java 活动源代码:

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

我该如何解决?

4

3 回答 3

5

当您旋转屏幕时,整个 Activity 将被销毁并从头开始,包括onCreate()使用setContentView(R.layout.main);. 您应该将最后选择的布局存储在一个变量中,并使用以下命令加载此变量:

setContentView(lastLayout);

您需要在应用程序运行时覆盖onSaveInstanceState()onRestoreInstanceState()记住布局选择。这种方法只是暂时的,因为当应用程序关闭时这种状态会丢失。
否则,您可以使用 SharedPreferences(或类似数据库或通用文件之类的东西)来记住跨多个会话的布局选择。

于 2012-11-12T18:52:57.960 回答
1

使用 onSaveInstanceState() 保存您的活动状态,并使用 onRestoreInstanceState() 检索您的活动状态。

onRestoreInstanceState() 在 onStart() 之后调用,而 onCreate() 在 onStart() 之前调用。onRestoreInstanceState() 仅在被操作系统杀死后重新创建活动时调用。使用 put 方法将值存储在 onSaveInstanceState() 中:

protected void onSaveInstanceState(Bundle icicle) {
  super.onSaveInstanceState(icicle);
  icicle.putLong("param", value);
}

这是一个教程 http://www.androidcompetencycenter.com/tag/onrestoreinstancestate/

于 2012-11-12T19:06:43.480 回答
0

澄清一下,如果您是横向或纵向,Android 首先在 -land 目录中查找布局文件,如果未找到,则检查默认布局目录。您的文件应命名如下,系统将根据设备的当前配置在运行时加载:

res/layout/main.xml
res/layout-land/main.xml

查看有关提供资源的文档以获取更多信息。

于 2012-11-12T18:57:40.897 回答