在活动的 onCreate 中,我们连接到远程系统并下载数据。我们一直向用户显示一个可取消的 ProgressDialog。使用 AsyncTask 完成下载。在 preExecute() 中,我们显示对话框,在 postExecute() 中,我们将其关闭。
问题是当下载正在进行并且显示 ProgressDialog 时,如果用户按下设备上的“搜索”按钮,ProgressDialog 就会消失。后台线程仍在运行。
是什么导致了这种行为?如何避免这种情况?
请帮忙。
谢谢。
在活动的 onCreate 中,我们连接到远程系统并下载数据。我们一直向用户显示一个可取消的 ProgressDialog。使用 AsyncTask 完成下载。在 preExecute() 中,我们显示对话框,在 postExecute() 中,我们将其关闭。
问题是当下载正在进行并且显示 ProgressDialog 时,如果用户按下设备上的“搜索”按钮,ProgressDialog 就会消失。后台线程仍在运行。
是什么导致了这种行为?如何避免这种情况?
请帮忙。
谢谢。
这应该可以解决这个问题(注意我把它放在对话框生成器上):
.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:当我单击搜索按钮时,这似乎是防止 ProgressDialog 被解雇的重复(Android)