RunOnUiThread内にあるAlertDialogのOnClickイベント内でメソッドを呼び出す際に問題が発生しました。
以下のロジックは、applyUpdate()メソッドの実行中にProgressDialogが表示されることです。ダウンロードが失敗したか、まだ進行中の場合、メソッドは0を返します。ユーザーは、ダウンロードを再開するか続行するかを選択できます。
問題は、[再起動]を選択すると、AlertDialogが画面に表示されたままになることです(ボタンがクリックされた状態)。
ダイアログが閉じる前にdoDownload()が開始されていますか、それともスレッドの問題ですか、それとも他の何かですか?
public void doApply(View view){
progressDialog = ProgressDialog.show(UpdateForm.this, "", "Applying update...");
runOnUiThread(new Runnable() {
@Override
public void run() {
try{
applyUpdate = nnEngine.applyUpdate();
} catch (Exception e) {
// Handle exception
}
// Check update result.
progressDialog.dismiss();
switch (applyUpdate) {
// Other cases removed.....
case 0:
// Download in progress or failed.
AlertDialog.Builder inprogDlg = new AlertDialog.Builder(UpdateForm.this);
inprogDlg.setTitle("Download in progress or failed.");
inprogDlg.setPositiveButton("Continue download", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
// Wrong button may be displayed.
notifyUser(null, checkDownloadButton);
}
});
inprogDlg.setNegativeButton("Restart download", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
doDownload(getWindow().getDecorView().findViewById(android.R.id.content));
}
});
inprogDlg.create().show();
break;
}
}
});
}