在活动的onCreate中,我们连接到远程系统并下载数据。我们一直向用户显示可取消的ProgressDialog。使用AsyncTask完成下载。在preExecute()中,我们显示对话框,在postExecute()中我们忽略它。
问题是当下载正在进行并且显示ProgressDialog时,如果用户按下设备上的“搜索”按钮,则ProgressDialog将消失。后台线程仍在运行。
导致这种行为的原因是什么?如何避免这种情况?
请帮忙。
感谢。
答案 0 :(得分:0)
这应该可以解决这个问题(请注意我把它放在对话框构建器上):
.setOnKeyListener(new DialogInterface.OnKeyListener() {
@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_SEARCH && event.getRepeatCount() == 0) {
return true; // Pretend we processed it
}
return false; // Any other keys are still processed as normal
}
})
也许甚至可以抓住正面和负面按钮,仅处理这些按钮,对任何其他按键都返回true。如果你能想出来就会好奇......
PS:我读到对话框中有更多的“漏洞”,即你可以摆脱它而不会碰到对话框本身的任何按钮。这显然是一个。有人知道其他人吗?
PS2:这似乎是Prevent ProgressDialog from being dismissed when I click the search button (Android)
的重复