我有两个按钮:一个用于启动执行功能,如下面给出的线程和进度对话框
start_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
Log.d(TAG, "mMainButton clicked");
showLoading();
// Calling showdialog before downloading..
Thread t = new Thread(){
public void run() {
startdownload();
// Code for download....
// After download UI thread will call
runOnUiThread(new Runnable() {
public void run() {
dialog.cancel();
alertbox("Info","Download Completed");
}
});
}};
t.start();
}
});
public ProgressDialog dialog;
public void showLoading () {
// prepare the dialog box
//ProgressDialog
dialog = new ProgressDialog(this);
// make the progress bar cancelable
dialog.setCancelable(true);
// set a message text
dialog.setMessage("Please wait while Downloading..");
// show it
dialog.show();
}
protected void alertbox(String title, String mymessage) {
new AlertDialog.Builder(this)
.setMessage(mymessage)
.setTitle(title)
.setCancelable(true)
.setNeutralButton("OK",
new DialogInterface.OnClickListener()
{
public void onClick(DialogInterface dialog, int whichButton){}
}) .show();
}
public Boolean startdownload() {
try
{
downloadhelper = new download_helper(this);
downloadhelper.DownloadProblemAndReasonCode();
pkManifest=downloadhelper.DownloadNewManifest();
downloadhelper.DownloadNewMessages();
//downloadhelper.DeleteOldManifest();
}
catch(Exception exception)
{
exception.toString();
}
return false;
}
另一个停止下载的按钮,如下所示:
stop_button.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
onStop();
MessageBox("Down Load Stopped");
}
});
public void onStop() {
super.onStop();
isRunning = false;
}
问题在于,由于前面的进度对话框,我无法单击按钮来停止已启动的功能。
有没有办法停止执行点击的开始按钮功能?
答案 0 :(得分:3)
您可以设置进度对话框的oncancellistner
ProgressDialog p;
p.setCancelable(true);
p.setOnCancelListener(new OnCancelListener() {
@Override
public void onCancel(DialogInterface dialog) {
//stop thread execution
}
});
如果用户取消对话框,这将取消执行。 (后退键)
修改强>
我没有测试过这个
ProgressDialog p;
p.setButton(ProgressDialog.BUTTON_NEGATIVE, "Cancel", new OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//This might work
}
});
答案 1 :(得分:1)
使用Asynctask显示进度对话框并将其关闭。在那个节目中,在OnPreExecute()中显示你的进度对话框,并在OnPostExecute()中关闭你的对话框。看到这个链接: Asynctask Help
答案 2 :(得分:0)
对我来说,正确的解决方案是启用Progress Dialog的取消按钮功能(由ProgressDialog自动提供),这对于更加安全的一致界面也是有意义的。