2017-02-10 65 views
0

我使用ProgressDialog來顯示一些下載狀態。我添加了兩個按鈕,名稱分別爲Cancel & Paused點擊任何按鈕後,ProgressDialog自動關閉

當我點擊任何按鈕時,ProgressDialog正在被解僱,但我需要ProgressDialog不被自動解僱,因爲我必須處理一些其他的東西。

我的代碼是:

ProgressDialog progressDialog; 
progressDialog = new ProgressDialog(this); 
progressDialog.setTitle("Please Wait.."); 
progressDialog.setMessage("Downloading"); 
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
progressDialog.setMax(100); 
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 
      Toast.makeText(MainActivity.this, "Canceled", Toast.LENGTH_SHORT).show(); 
     } 
    }); 
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Paused", new DialogInterface.OnClickListener() { 
     @Override 
     public void onClick(DialogInterface dialogInterface, int i) { 


      // DownloadManager.getInstance().pause(fileUrl); 
      Toast.makeText(MainActivity.this, "Paused", Toast.LENGTH_SHORT).show();\ 
     } 
    }); 

progressDialog.show(); 

問題出在哪裏? [注:我不想回避駁回當用戶點擊progressDialog但外面當任何按鈕,用戶點擊]

+1

它是默認行爲。你需要爲該自定義佈局 –

+2

[當用戶觸摸屏幕時如何避免忽略我的進度對話框]可能的重複(http://stackoverflow.com/questions/15432476/how-to-avoid-dismissing-my用戶使用'setCancelable(false)'''' – Marat

+1

'將會阻止用戶關閉在屏幕外點擊的進度對話框。 – Sudarshan

回答

2

獲取progressDialog.show()後按鈕和設置View.OnClickListener到那裏處理點擊。

ProgressDialog progressDialog = new ProgressDialog(this); 
progressDialog.setTitle("Please Wait.."); 
progressDialog.setMessage("Downloading"); 
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL); 
progressDialog.setMax(100); 
progressDialog.setButton(DialogInterface.BUTTON_NEGATIVE, "Cancel", 
     (DialogInterface.OnClickListener) null); 
progressDialog.setButton(DialogInterface.BUTTON_POSITIVE, "Pause", 
     (DialogInterface.OnClickListener) null); 
progressDialog.show(); 

progressDialog.getButton(DialogInterface.BUTTON_NEGATIVE) 
     .setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     // Handle "Cancel" button click here 
     Toast.makeText(MainActivity.this, "Canceled", Toast.LENGTH_SHORT).show(); 
    } 
}); 
progressDialog.getButton(DialogInterface.BUTTON_POSITIVE) 
     .setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick(View view) { 
     // Handle "Pause" button click here 
     Toast.makeText(MainActivity.this, "Paused", Toast.LENGTH_SHORT).show(); 
    } 
}); 
+0

謝謝。它的工作.. – Sudarshan

-2

好了我給你....和更新我的答案...

您需要設置onClickListener的ProgressDialog已經顯示出後

myDialog = new ProgressDialog(this); 

myDialog.setCancelable(false); 
myDialog.setCanceledOnTouchOutside(false); 

// Create the button but set the listener to a null object. 
myDialog.setButton(DialogInterface.BUTTON_NEUTRAL, "start", 
    (DialogInterface.OnClickListener) null) 

// Show the dialog so we can then get the button from the view. 
myDialog.show(); 

// Get the button from the view. 
Button dialogButton = myDialog.getButton( 
DialogInterface.BUTTON_NEUTRAL); 

// Set the onClickListener here, in the view. 
dialogButton.setOnClickListener(new View.OnClickListener() { 
    @Override 
    public void onClick (View view) { 

     if (isPrepared) { 
      myDialog.dismiss(); 

     } 

     // Dialog will not get dismissed unless "isPrepared". 

    } 

}); 

使用setCanceledOnTouchOutside爲停止對話dimiss點擊屏幕上的任何地方

dialog.setCanceledOnTouchOutside(false); 

使用setCancelable對於停止對話框解僱點擊硬件後退按鈕

dialog.setCancelable(false); 

希望這會幫助你。

+0

無論'setCancelledOnTouchOutside'也不'setCancelable(假)'解決了,因爲他想要阻止該對話框當按鈕屬於關閉他的問題點擊對話框 –

+0

實際上,我不想在用戶點擊progressDialog之外但用戶單擊任何按鈕時避免解僱。 – Sudarshan

+0

我有更新我的答案。現在檢查。 –

1

這是ProgressDialog的默認行爲。你可以嘗試描述方法ProgressDialog: How to prevent automatic dismissing of Dialog inside setButton-Listener?(我不會推薦這個)或者做一個自定義佈局。

編輯:

雖然我們在這,我可以建議另一種非正統的方法。

覆蓋dismiss()

public class MyProgressDialog extends ProgressDialog { 

public boolean close = true; 

@Override 
public void dismiss() { 
    if (close) { 
     super.dismiss(); 
    } else { 
     close = true; 
    } 
} 

,並在您的按鈕點擊,設置接近假第一。

注意else子句使得一次性的事情,所以,下一次的代碼另一部分調用dismiss()它仍然會工作

+0

我已經在鏈接中檢查了答案。但是我也遇到了一個問題,那就是:如果我想通過在框外單擊來關閉「ProgressDialog」,則「ProgressDialog」不會消失。 – Sudarshan

+0

這就是爲什麼我說我不會推薦它。它肯定會有副作用,你發現了一個 –

+0

@Sudarshan我只是想到了另一種我認爲會有所幫助的方式,我相信它不會引起任何副作用 –