2017-02-10 73 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我只是想到了另一种我认为会有所帮助的方式,我相信它不会引起任何副作用 –