1

我是 android 编程的初学者,现在我正在开发一个 android 应用程序,它默认按排序顺序显示数据,并提供搜索功能。为此,我编写了一个名为 search 的活动,它将搜索内容并显示在列表视图中。我的问题是当我旋转设备时,即使在覆盖 onConfigurationChanged 方法之后也会调用 Activity 类的 onCreate 方法。我还在清单文件中进行了以下更改以调用 onConfigurationChanged 方法。

<activity
    android:name=".Search"
    android:configChanges="orientation|keyboardHidden"
    android:screenOrientation="sensor" >
</activity>

我的搜索活动如下:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
  System.out.println("HERE AT ONCREATE");
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    System.out.println("HERE AT ON CONFIGURATION CHANGED");
    if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
        setContentView(R.layout.search_port);
    } else if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
        setContentView(R.layout.search_land);
    }
}

所以旋转设备时的输出将是:

  1. 此处配置已更改

  2. 在这里

我不想onCreate()在旋转设备时调用该方法。请帮我解决这个问题。我正在使用带有三星 Galaxy Tab(7 英寸显示屏)的 Android 2.2 SDK。

4

2 回答 2

2

您尝试使用上述代码完成的工作可以更简单地完成。

如果您将布局文件名称更改为相同:search_layout.xml并以这种方式将它们放置在您的项目中:

<project>/res/layout/search_layout.xml       // Portrait Layout
<project>/res/layout-land/search_layout.xml  // Landscape Layout

然后以这种方式修改您的活动:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Log.i("Search Activity", "onCreate() was called.");
}

@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Log.i("Search Activity", "onConfigurationChanged was called.");
}

这就是我在我的活动中设置它的方式,并且该onCreate()方法只调用一次。

于 2012-04-19T15:37:31.763 回答
-4

没有办法避免它。当您旋转设备时,您的 Activity 将被终止并重新创建。没有办法避免它,但是你可以重写 onSaveInstanceState(),它会在 Activity 被销毁之前被调用。

于 2012-04-19T15:33:19.670 回答