jwb*_*ley 34 android dialog progress button back
我有一个的AsyncTask,显示了progressDialog同时工作(它调用runOnUiThread从内部doInBackground显示进度对话框).
在运行时,我想允许使用后退按钮来取消操作; 其他人遇到此问题:当ProgressDialog正在运行时,BACK按钮不起作用
因为什么原因我不能回复那个帖子,因此不得不开始另一个?!(另一天的另一个问题)
我和Sandy有同样的想法,但是在progressDialog显示时,这段代码从未被调用过,为什么会这样?我已经在我的主要活动类中实现了它,progressDialog是否暂时将我的前景焦点从我的课程中移开?
use*_*618 45
首先,您应该显示对话框OnPreExecute,隐藏它OnPostExecute,并且 - 如有必要 - 通过发布进度来修改它.(见这里)
现在回答你的问题:ProgressDialog.show()可以OnCancelListener作为一个论点.您应该提供一个调用cancel()进度对话框实例的方法.
例:
@Override
protected void onPreExecute(){
_progressDialog = ProgressDialog.show(
YourActivity.this,
"Title",
"Message",
true,
true,
new DialogInterface.OnCancelListener(){
@Override
public void onCancel(DialogInterface dialog) {
YourTask.this.cancel(true);
finish();
}
}
);
}
Run Code Online (Sandbox Code Playgroud)
哪里_progressDialog是.的ProgressDialog成员YourTask.
此类在API级别26中已弃用.ProgressDialog是一个模式对话框,可防止用户与应用程序进行交互.您应该使用ProgressBar等进度指示器,而不是使用此类,可以将其嵌入到应用程序的UI中.或者,您可以使用通知来通知用户任务的进度.链接
Jah*_*hid 15
这可以通过以下代码片段来实现:
progress.setCancelable(true);
progress.setCanceledOnTouchOutside(false);
Run Code Online (Sandbox Code Playgroud)
progress是ProgressDialog对象......
这将使后退按钮关闭对话框,但阻止任何触摸输入执行此操作...
Far*_*an 13
好吧,我遇到了同样的问题.对我有用的最简单的方法是使用progressDialog.setCancelable(true)..这声明是否可以通过按后退键来取消对话框.尝试它并让我知道它是否适合你.祝好运
我刚刚找到了解决这个问题的完美而简单的解决方案.有一种ProgressDialog设置KeyListener 的方法.
progressDialog.setOnKeyListener(new OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if(keyCode==KeyEvent.KEYCODE_BACK && !event.isCanceled()) {
if(progressDialog.isShowing()) {
//your logic here for back button pressed event
}
return true;
}
return false;
}
});
Run Code Online (Sandbox Code Playgroud)
它工作得很好setCancelable(false).我也在检查event.isCanceled(),因为没有我,我得到两个事件.我在带有和没有硬件键的Lollipop设备上进行了测试.
像取消一样处理后退按钮不是正确的方法.
当用户触摸对话框外部的屏幕时,也会发生取消.你想区分这两个动作,不是吗?
正确的方法是扩展ProgressDialog类并覆盖onBackPressed方法.
private class SubProgressDialog extends ProgressDialog {
public SubProgressDialog(Context context) {
super(context);
}
@Override
public void onBackPressed() {
/** dismiss the progress bar and clean up here **/
}
}
public void displayProgressBar(){
progressBar = new SubProgressDialog(this);
progressBar.setProgressStyle(ProgressDialog.STYLE_SPINNER);
progressBar.setCancelable(false);
progressBar.setMessage(getString(R.string.authorizing));
progressBar.show();
new Thread(new Runnable() {
public void run() {
}
}).start();
Run Code Online (Sandbox Code Playgroud)
}
注意setCancelable(false),再次强调后退按钮与简单取消不同.
此外,这将有效地忽略来自用户的任何其他触摸输入.