我意识到这个主题还有其他一些帖子,但这些帖子的解决方案对我不起作用。
基本上,我想停止我的Activity在设备方向更改时重新启动。为此,我修改了清单文件中的活动:
<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden"></activity>
我在我的活动中覆盖了onConfigurationChanged()
:
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
System.out.println("IN onConfigurationChanged()");
}
但是,在方向更改时,活动仍在重新启动,并且未调用onConfigurationChanged()
方法。
有谁知道为什么会这样?
答案 0 :(得分:8)
您应该使用13 API并在清单的活动部分设置此配置: 机器人:configChanges = “取向| keyboardHidden |屏幕尺寸”
工作正常。在所有Android版本。
答案 1 :(得分:2)
将您的清单更改为以下
<activity android:name=".MyActivity" android:configChanges="orientation|keyboardHidden|screenSize"></activity>
并参阅此链接以获取详细说明orientation issue
答案 2 :(得分:1)
唯一有效的方法是使用getLastNonConfigurationInstance()。 http://developer.android.com/reference/android/app/Activity.html#getLastNonConfigurationInstance()
答案 3 :(得分:1)
您不应该使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);方法调用应用程序中的任何位置,这将避免调用onConfigChanged()方法。
答案 4 :(得分:0)
如果您在清单中定义configchanges = orientation,那么活动将不会重新启动,而是onConfigurationChanged将被调用,因为您当前已实现它。首先尝试使用日志类Log记录(这是在android中记录事物的正确方法,不要使用System out,这被认为是一种不好的做法)和超级之前,但这只是1%的几率它会修复什么发生在你身上。
第二种情况是您将当前活动嵌套在tabHost例如或活动组中。如果您的活动有父活动,则需要在该活动中添加配置更改,并在那里进行回调。
如果是这种情况,并且您想要转发结果或者在子项中执行某些操作,那么您需要在父项中获取对子项的引用,并在其上调用方法以进行更改。
答案 5 :(得分:0)
如果你有一个片段,那么你也需要这个:
void setRetainInstance(boolean retain)
控制是否有片段 实例在Activity重新创建时保留(例如从a 配置改变)。
我遇到了这个并将其设置为'true'修复它。
答案 6 :(得分:0)
我用过这个,它有所帮助:
package="com.s2dio.evallet"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="8" />
答案 7 :(得分:-2)
将onConfigurationChanged
方法模式化为以下
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
// Checks the orientation of the screen
if (newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE) {
Toast.makeText(this, "landscape", Toast.LENGTH_SHORT).show();
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT) {
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
}
}