android锁定事件监听器和事件处理

时间:2011-08-07 08:47:09

标签: java android events locking

我的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()上关闭我的数据库,这是非常好的,他删除了答案。对于我的问题,这是一个很好的解决方法,但仍然不是我正在寻找的解决方案。

我也尝试禁用按钮并在各个位置启用按钮,问题仍然存在。如果我按下按钮的速度太快,似乎我总能实现该功能被调用太多次。

1 个答案:

答案 0 :(得分:1)

您可以在此处使用的一个好的UI技巧是在用户点击后禁用该按钮。做这样的事情:

@Override
public void onClick(View arg0) {
    arg0.setEnabled(false);
    handleSubmitClick();
}

如果需要,您当然可以在onClick功能的末尾启用按钮。

当按钮被禁用时,用户将无法点击它,因此您永远不会获得两个onClick事件。更重要的是,按钮的样式会发生变化,因此用户会知道点击不会做任何事情。

这种技术在整个地方使用(例如Gmail的发送按钮),我认为它是很好的UI设计。

现在,如果您想允许用户多次按下某个按钮,真的非常快,从不松动或跳过一次按下,您需要实现某种排队机制。但我只能想象这在生死攸关的游戏中是必要的:)