我是android编程的初学者,现在我正在开发一个Android应用程序,默认情况下以排序顺序显示数据,并提供搜索工具。为此我写了一个名为search的活动,它将搜索内容并显示在listview中。我的问题是当我旋转设备时,甚至在覆盖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);
}
}
因此旋转设备时的输出将是:
此时配置已更改
在这里
我不想在旋转设备时调用onCreate()
方法。请帮我解决这个问题。我使用Android 2.2 SDK与三星Galaxy Tab(7英寸显示屏)。
答案 0 :(得分:2)
您尝试使用上述代码完成的工作可以更简单地完成。
如果您将布局文件名称更改为相同:search_layout.xml
并以这种方式将它们放在项目中:
<project>/res/layout/search_layout.xml // Portrait Layout
<project>/res/layout-land/search_layout.xml // Landscape Layout
然后以这种方式修改您的Activity:
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()
方法只调用一次。
答案 1 :(得分:-4)
没有办法避免它。旋转设备时,您的活动将被终止并重新创建。没有办法避免它,但你可以覆盖onSaveInstanceState(),它将在活动被销毁之前被调用。