如何解决未在Activity中调用Android onConfigurationChanged
| 我意识到关于此主题还有其他几篇文章,但是这些文章的解决方案对我不起作用。 基本上,我想让我的活动停止在设备方向更改后重新启动。为此,我修改了清单文件中的活动: <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()
方法。
有谁知道为什么会这样?
解决方法
您应该使用13 API,并在清单的活动部分中设置以下配置:
android:configChanges = \“ orientation | keyboardHidden | screenSize \”
它工作正常。所有Android版本。
, 将清单更改为关注
<activity android:name=\".MyActivity\" android:configChanges=\"orientation|keyboardHidden|screenSize\"></activity>
并参考此链接以获取详细的说明说明问题
, 唯一有效的方法是使用getLastNonConfigurationInstance()。 http://developer.android.com/reference/android/app/Activity.html#getLastNonConfigurationInstance()
, 您不应使用setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);方法可以在应用程序中的任何位置调用,这将避免调用onConfigChanged()方法。
, 如果您在清单中定义configchanges = orientation,那么该活动将不会重新启动,而是将调用onConfigurationChanged,因为您当前已实现了该活动。首先尝试使用日志类Log记录日志(这是在android中记录事物的正确方法,请勿将System out用于此操作,这被认为是不正确的做法),并且在使用super之前,只有1%的可能性可以解决你怎么了
第二种情况是您将当前活动嵌套在例如tabHost或“活动组”中。如果您的活动具有父活动,则需要在该活动中添加配置更改,然后将在其中进行回调。
如果是这种情况,并且您要转发结果或在子级中也做一些事情,则需要获取对父级中子级的引用,并在其上调用方法以进行更改。
, 如果您有片段,则还需要:
void setRetainInstance(boolean retain)
控制是否有片段
实例在“活动创建”中保留(例如
配置更改)。
我遇到了这个问题,并将其设置为“真”来修复它。
, 我用了它,它帮助了:
package=\"com.s2dio.evallet\"
android:versionCode=\"1\"
android:versionName=\"1.0\" >
<uses-sdk
android:minSdkVersion=\"8\"
android:targetSdkVersion=\"8\" />
, 将您的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();
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。