我的android应用程序中有一个简单的按钮onClickListener,它所做的只是将一些东西写入数据库。它看起来像这样
private void setEventListeners(){
mSpecialViewClass.getSubmitButton().setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
handleSubmitClick();
}
});
}
private void handleSubmitClicks(){
if (counter<0){
writeCounterToDb();
} else {
//do some stuff
closeDatabase();
}
}
现在这很好用,但是如果我足够快地点击按钮,我会收到一个关闭的数据库错误
java.lang.IllegalStateException: database not open
如何在上一个关键事件被出售之前阻止关键监听器做任何事情?
编辑:一些用户建议在Activity.onDestroy()上关闭我的数据库,这是非常好的,他删除了答案。对于我的问题,这是一个很好的解决方法,但仍然不是我正在寻找的解决方案。
我也尝试禁用按钮并在各个位置启用按钮,问题仍然存在。如果我按下按钮的速度太快,似乎我总能实现该功能被调用太多次。
答案 0 :(得分:1)
您可以在此处使用的一个好的UI技巧是在用户点击后禁用该按钮。做这样的事情:
@Override
public void onClick(View arg0) {
arg0.setEnabled(false);
handleSubmitClick();
}
如果需要,您当然可以在onClick功能的末尾启用按钮。
当按钮被禁用时,用户将无法点击它,因此您永远不会获得两个onClick事件。更重要的是,按钮的样式会发生变化,因此用户会知道点击不会做任何事情。
这种技术在整个地方使用(例如Gmail的发送按钮),我认为它是很好的UI设计。
现在,如果您想允许用户多次按下某个按钮,真的非常快,从不松动或跳过一次按下,您需要实现某种排队机制。但我只能想象这在生死攸关的游戏中是必要的:)