onCreate方法是调用onConfigurationChanged方法在Activity类

问题描述:

我在机器人编程初学者,现在我工作的这显示在默认排序顺序的数据,并且还提供了一个搜索工具Android应用程序后调用。为此,我编写了一个名为搜索的活动,它将搜索内容并显示在列表视图中。我的问题是当我旋转设备时,即使在重写onConfigurationChanged方法后,Activity类的onCreate方法也会被调用。我还在清单文件中进行了以下更改以调用onConfigurationChanged方法。onCreate方法是调用onConfigurationChanged方法在Activity类

<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. 在这里ON配置已更改

  2. 在这里ONCREATE

我不想让onCreate()方法,同时旋转设备调用。请帮我解决这个问题。我正在使用Android 2.2 SDK和Samsung Galaxy Tab(7英寸显示器)。

+1

什么是清单文件,你的目标API版本。你检查了这个链接吗?如果目标是13或更高,似乎你需要“屏幕”也http://developer.android.com/guide/topics/manifest/activity-element.html – kosa 2012-04-19 15:32:14

+0

@thinksteep我不知道我做错了什么,而调试我可以看到onConfigurationChanged方法稍后调用,它再次调用该活动的onCreate方法。我觉得它很奇怪。 – Krishna 2012-04-19 16:02:20

+0

你尝试这个http://developer.android.com/guide/topics/resources/runtime-changes.html – kosa 2012-04-19 16:11:36

你想与上面的代码来完成什么可以更简单地完成。

如果你改变你的布局文件名是既相同: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."); 
} 

这我如何在我的Activity中设置它,并且onCreate()方法只被调用一次。

+0

感谢你的答案,即使使用xml文件布局具有相同的名称,我的问题onCreate方法不会结束,我需要做一些初始化,在活动的开始。但是在改变设备的方向时,它不会重新创建或重新初始化相同的事物。 – Krishna 2012-04-19 16:00:35

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

+3

清单文件本身的configChanges允许您避免调用onCreate(重新创建)。正确阅读此链接。 http://developer.android.com/reference/android/app/Activity.html#ConfigurationChanges – kosa 2012-04-19 15:34:40

+0

这是一个错误的答案。你可以在活动清单文件中声明configChanges,这样就不会重新创建活动 – akash89 2016-10-08 19:46:57