Android方向窗口在方向更改期间泄露

时间:2015-06-15 16:37:27

标签: android alertdialog

我在片段上显示一个对话框,当异步任务完成执行时,该对话框应该被解除。一切都很好,直到我在对话框显示时改变方向:我得到一个Window泄漏错误。我知道这是因为重新创建了活动,并且对话框“附加”到旧的。我不能在清单上使用android:configChanges="keyboardHidden|orientation|screenSize"因为我有横向和纵向的不同布局,所以我在onPause()方法上取消了对话框,并在创建新活动时再次重新创建它。但现在我有一个不同的问题:我的异步任务没有对新对话框的引用,所以它不能解雇它...

我已经使用对话框片段尝试了相同的操作,但问题仍然存在。

有解决这个问题的方法吗?

感谢。

1 个答案:

答案 0 :(得分:0)

我知道你说你不能使用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
    }
}

通过这种方式,您可以保留不同的布局,并保留对话框的引用