当我点击一个按钮然后在AsyncTask
显示ProgressDialog代码和onPreExecute
我正在使用onPostExecute
时执行dialog.dismiss()
时,我有一个应用程序。
在我的清单文件中,我在android:screenOrientation="portrait"
中声明Activity
,但是当我点击按钮开始ProgressDialog
时,当更改屏幕方向时,它会崩溃。
搜索完成后,我收到了此链接How to handle screen orientation change when progress dialog and background thread active?。
但是,我无法理解我应该做什么。
答案 0 :(得分:3)
您可以在清单中放置一行android:screenOrientation="portrait"
或
您可以在onDestoy()
活动方法中关闭对话框。为此你必须在全局和onDestoy()
检查进度对话框
例如
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();
,您的对话框就会被取消!
亲切的问候, 祝你好运!