方向变化崩溃

时间:2011-10-12 10:59:23

标签: android

当我点击一个按钮然后在AsyncTask显示ProgressDialog代码和onPreExecute我正在使用onPostExecute时执行dialog.dismiss()时,我有一个应用程序。

在我的清单文件中,我在android:screenOrientation="portrait"中声明Activity,但是当我点击按钮开始ProgressDialog时,当更改屏幕方向时,它会崩溃。

搜索完成后,我收到了此链接How to handle screen orientation change when progress dialog and background thread active?

但是,我无法理解我应该做什么。

3 个答案:

答案 0 :(得分:3)

您可以在清单中放置一行android:screenOrientation="portrait"或 您可以在onDestoy()活动方法中关闭对话框。为此你必须在全局和onDestoy()检查进度对话框

中声明progressdialog

例如

if(progressDialog != null && progressDialog.isShowing()) {
progressDialog.dismiss();
progressDialog  = null;
}

答案 1 :(得分:1)

这是因为您的Activity正在尝试关闭已经丢失其上下文的对话框 android:configChanges="keyboardHidden|orientation"将此添加到您的清单活动中。

答案 2 :(得分:0)

我已经看到了之前的答案,谈到在onDestoy()onPostExecute中撤消对话框。

1 /存在问题:事实onDestoy()onPostExecute并非总是如此!所以无论如何,你可以有这个崩溃的问题...... - >最好在onPause()doInBackground()结束时关闭对话框。

事实是,每次您的方向发生变化时,都会创建一个新的View。然后,您可以通过在XML中添加onConfigChanges属性来更好地处理活动:

<activity ...
android:screenOrientation="portrait" 
android:configChanges="orientation|keyboardHidden">

总而言之,您在活动中将ProgressDialog定义为全局属性,然后您确定它是活动Context的一部分,并且您可以从活动中的任何位置更新...您添加了一个方法通过检查来取消进度:

/**
 * Instance of ProgressDialog.
 */
private ProgressDialog dialog;

你可以在你的代码中实例化它,就像这样:

dialog = new ProgressDialog(this);
    dialog.setMessage("Loading...");
    dialog.setCancelable(true);
    // show the loading dialog
    dialog.show();

现在解雇方法:

/**
 * check that the dialog exists before dismissing it.
 */
private void dialogDismiss() {
    try {
        if (Util.isNotEmpty(dialog)) {
            if (dialog.isShowing()) {
                dialog.dismiss();
            }
        }
    } catch (Exception e) {
        Log.e(TAG, "problem with the dialog dismiss again !!!", e);
    }
}

然后从此活动的所有地方,您致电dialogDismiss();,您的对话框就会被取消!

亲切的问候, 祝你好运!