我在无法隐藏的警报对话框中遇到问题。
当用户按下按钮时,我会显示一个使用此代码创建的对话框:
new AlertDialog.Builder(this)
.setTitle(R.string.enterPassword)
.setView(textEntryView)
.setPositiveButton(R.string.ok,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
String password = pwdText.getText().toString();
dialog.dismiss();
processUserAction(password,targetUri);
}
})
.setNegativeButton(R.string.cancel,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int whichButton) {
}
})
.
create();
在“processUserAction”方法中执行了一些繁重的操作,在其中我使用了一个显示 ProgressDialog 的 AysncTask。
我遇到的问题是提示输入密码的对话框永远不会离开屏幕(我尝试过用dismiss(),cancel())。我猜它会一直留在那里,直到 onClick 方法完成。
所以,我的问题是如何关闭那个 AlertDialog,所以我可以显示 ProgressDialog?
我一直在尝试的另一种方法是在 AlertDialog 中设置 DismissListener 并从那里调用繁重的操作,但我没有运气(它没有被调用)。
编辑:添加 AsyncTask 代码
public class BkgCryptOperations extends AsyncTask<File,Void,Integer>{
@Override
protected Integer doInBackground(File... files) {
if (files!=null && files.length > 0){
File source = files[0];
File target = files[1];
return cryptAction.process(source,password, target);
}
return Constants.RetCodeKO;
}
CryptAction cryptAction;
String password;
ProgressDialog progressDialog;
public BkgCryptOperations (CryptAction cryptAction,String password,ProgressDialog progressDialog){
this.cryptAction=cryptAction;
this.password=password;
this.progressDialog=progressDialog;
}
@Override
protected void onPreExecute() {
if (progressDialog!=null){
progressDialog.show();
}
}
protected void onPostExecute(Integer i) {
if (progressDialog!=null){
progressDialog.dismiss();
}
}
}
提前致谢