Android 对话框 Window 在方向更改期间泄漏
Android Dialog Window Leaked During Orientation Change
我在一个片段上显示了一个对话框,该对话框应该在异步任务完成执行时被关闭。一切正常,直到我在显示对话框时更改方向:我收到 Window 泄漏错误。我知道那是因为重新创建了 activity,而对话框是 'attached' 到旧的。我不能在清单上使用 android:configChanges="keyboardHidden|orientation|screenSize"
,因为我有不同的横向和纵向布局,所以我关闭了 onPause()
方法上的对话框,并在创建新的 activity 时再次重新创建它。但现在我有一个不同的问题:我的异步任务没有对新对话框的引用,所以它不能关闭它...
我已经用对话片段尝试过同样的事情,但问题仍然存在。
有办法解决这个问题吗?
谢谢。
我知道你说你不能使用 android:configChanges="keyboardHidden|orientation|screenSize"
因为你有不同的横向和纵向布局,但请看一下 Android documentation 关于 自己处理配置更改:
@Override
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();
setContentView(R.layout.landscapeLayout);
//update your view elements, if any
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
setContentView(R.layout.portraitLayout);
//update your view elements, if any
}
}
这样您就可以保持不同的布局,并保留对对话框的引用
我在一个片段上显示了一个对话框,该对话框应该在异步任务完成执行时被关闭。一切正常,直到我在显示对话框时更改方向:我收到 Window 泄漏错误。我知道那是因为重新创建了 activity,而对话框是 'attached' 到旧的。我不能在清单上使用 android:configChanges="keyboardHidden|orientation|screenSize"
,因为我有不同的横向和纵向布局,所以我关闭了 onPause()
方法上的对话框,并在创建新的 activity 时再次重新创建它。但现在我有一个不同的问题:我的异步任务没有对新对话框的引用,所以它不能关闭它...
我已经用对话片段尝试过同样的事情,但问题仍然存在。
有办法解决这个问题吗?
谢谢。
我知道你说你不能使用 android:configChanges="keyboardHidden|orientation|screenSize"
因为你有不同的横向和纵向布局,但请看一下 Android documentation 关于 自己处理配置更改:
@Override
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();
setContentView(R.layout.landscapeLayout);
//update your view elements, if any
} else if (newConfig.orientation == Configuration.ORIENTATION_PORTRAIT){
Toast.makeText(this, "portrait", Toast.LENGTH_SHORT).show();
setContentView(R.layout.portraitLayout);
//update your view elements, if any
}
}
这样您就可以保持不同的布局,并保留对对话框的引用