由于进度对话框而停止线程的问题

时间:2011-08-19 06:51:50

标签: android

我有两个按钮:一个用于启动执行功能,如下面给出的线程和进度对话框

 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;


            }

问题在于,由于前面的进度对话框,我无法单击按钮来停止已启动的功能。

有没有办法停止执行点击的开始按钮功能?

3 个答案:

答案 0 :(得分:3)

您可以设置进度对话框的oncancellistner

ProgressDialog p; 
p.setCancelable(true);
p.setOnCancelListener(new OnCancelListener() {          
@Override
public void onCancel(DialogInterface dialog) {
    //stop thread execution     
}
});

如果用户取消对话框,这将取消执行。 (后退键)

修改

回应Arun的问题

我没有测试过这个

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自动提供),这对于更加安全的一致界面也是有意义的。