Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android对话框窗口在方向更改期间泄漏_Android_Android Alertdialog - Fatal编程技术网

Android对话框窗口在方向更改期间泄漏

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

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

我已经用一个对话框片段尝试了同样的方法,但问题仍然存在

有办法解决这个问题吗


谢谢。

我知道你说过你不能使用android:configChanges=“keyboardHidden | orientation | screenSize”,因为你有不同的横向和纵向布局,但请看一看你自己处理配置更改的情况:

@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
    }
}

这样,您可以保留不同的布局,并保留对对话框的引用

我知道您说过您不能使用android:configChanges=“keyboardHidden | orientation | screenSize”,因为您的横向和纵向布局不同,但是,请看一看您自己处理配置更改的情况:

@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
    }
}

这样,您就可以保留不同的布局,并保留对对话框的引用。我更新了问题!问题是有点混乱,因为对话框是在一个片段中创建(和取消)的,所以我不知道该解决方案是否有效(如果有效,我也不知道如何解决!)是否有其他方法,或者您能告诉我如何使用配置更改来完成吗?谢谢嗯@FilipeRamos,不幸的是,我没有足够的经验使用这种方法来处理布局。我使用manifest声明来保持片段的活动性,并且不丢失对AsyncTask的引用。我的猜测是在asnwer上显示的
if
语句中,在
onConfigurationTask
方法中使用
setContentView
方法。我会编辑答案的,@Thyen。我更新了问题!问题是有点混乱,因为对话框是在一个片段中创建(和取消)的,所以我不知道该解决方案是否有效(如果有效,我也不知道如何解决!)是否有其他方法,或者您能告诉我如何使用配置更改来完成吗?谢谢嗯@FilipeRamos,不幸的是,我没有足够的经验使用这种方法来处理布局。我使用manifest声明来保持片段的活动性,并且不丢失对AsyncTask的引用。我的猜测是在asnwer上显示的
if
语句中,在
onConfigurationTask
方法中使用
setContentView
方法。我会编辑答案的,@Thyen。我更新了问题!问题是有点混乱,因为对话框是在一个片段中创建(和取消)的,所以我不知道该解决方案是否有效(如果有效,我也不知道如何解决!)是否有其他方法,或者您能告诉我如何使用配置更改来完成吗?谢谢嗯@FilipeRamos,不幸的是,我没有足够的经验使用这种方法来处理布局。我使用manifest声明来保持片段的活动性,并且不丢失对AsyncTask的引用。我的猜测是在asnwer上显示的
if
语句中,在
onConfigurationTask
方法中使用
setContentView
方法。我会编辑答案只需使用一个捆绑包并使用onSaveInstanceStateHi@user251182。你能告诉我你建议我用
onSaveInstanceState
方法保存什么吗?我已经在使用它来保存一个布尔值,该布尔值表示如果正在显示对话框…只需使用一个bundle并使用onSaveInstanceStateHi,@user251182。你能告诉我你建议我用
onSaveInstanceState
方法保存什么吗?我已经在使用它来保存一个布尔值,该布尔值表示如果正在显示对话框…只需使用一个bundle并使用onSaveInstanceStateHi,@user251182。你能告诉我你建议我用
onSaveInstanceState
方法保存什么吗?我已经在用它来保存一个布尔值,如果对话框正在显示。。。