我在Android中编写了一个相当简单的应用程序,大多数代码都处理好动画以使其看起来很好。
我的问题是,有时单击一个按钮,但只有在单击另一个按钮后才会调用onClick侦听器中的相关onClick()。
它接触到Android正在“缓冲”事件并在组中处理它们,而不是在它们生成时处理它们。
你们之前有没有人遇到这个问题,或者可以建议解决?
我不确定它是否重要,但我通常使用匿名对象作为我的听众,这对我来说更有意义。
score.setVisibility(VISIBLE);
score.setClickable(true);
score.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
soundEffect.soundForId(SoundEffect.DELETE_SOUND);
player.setToRmove(true);
//Toggle trash button to replace the score button and
// identify for the user that this player is due to be deleted
score.setVisibility(GONE);
score.setClickable(false);
trashButton.setVisibility(VISIBLE);
trashButton.setClickable(true);
trashButton.invalidate();
}
});
答案 0 :(得分:0)
我在项目中遇到过同样的问题。我正在播放大约2-3秒长的拍摄声音,但如果有人经常点击它,它会对事件进行分组。我通过每次按下后禁用拍摄按钮2秒来解决该问题。希望它可以帮助你。
答案 1 :(得分:0)
从逻辑上思考这个问题。更有可能出现以下哪种情况?
Android有一些代码可以监控您的UI生成事件的速度。如果它看到你正在快速生成它们,它就会开始将它们一起批处理。问题。快速意味着什么?需要做出哪些假设?为什么我会写这么疯狂的代码?
或者
由于您的匿名内部类的实例是在引发事件时创建的,并且这些实例是在单个线程上执行的,因此您是主UI线程,Android将消息放置到线程的消息队列中以执行这些实例。有问题吗?
如果您的主线程上运行的代码不是微不足道的,并且通常与更新UI无关,那么请使用另一个线程,例如: AsyncTask,用于执行代码。对于需要2-3秒的事情,你绝对应该这样做。
答案 2 :(得分:0)
我不知道这种事件的“分组”。当然事件是从队列中处理的,正如Simon建议的那样,你可能在某些时候在UI线程上做了太多事情而且你阻止了它。