1

我正在开发一个黑莓应用程序。当用户按下一个按钮并按住它 2 秒钟时,我想在同一屏幕上触发任何操作。

反正

谢谢

4

2 回答 2

3

这是您在非常非正式的伪代码中需要做的事情:

    When (click detected)
        Schedule Timer to execute in 2s.

    When (unclick detected)
        Cancel timer

计时器在用户第一次点击它时安排。如果用户按下按钮超过 2 秒,则计时器将运行。否则,当按钮在 2s 前松开时,定时器被取消,不会运行。请注意,如果用户仅在 2 秒或更晚的时间释放 Timer,也可以取消 Timer。在这些情况下,这不是问题,因为如果它在运行时被取消,它可以完成,如果它在完成后被取消,它什么也不做。

要检测单击/取消单击,您有多种选择。您可以从按钮类扩展并touchEvent 按照Peter的建议进行覆盖,或者您可以 在您的类中覆盖navigationClick 和覆盖。由于您需要在每个按钮中执行此操作,我宁愿将 ButtonField 子类化以启用自定义单击/取消单击侦听器,从而允许在其他屏幕中重用该类。navigationUnclickMainScreen

计时器只是Timer 您安排的常规TimerTask

于 2013-09-20T09:28:00.853 回答
0

我不知道为非触摸屏手机执行此操作的方法。

这可以通过覆盖字段的 touchEvent() 在触摸屏手机上实现。看看检测 touchEvent.Click 和 TouchEvent.Unclick 和/或 TouchGesture.Hover - 事实上,悬停是我认为你会击中的。

假设它是 Hover,那么您可以通过获取 Hover 计数来获得估计值,或者,使用 Click 获取开始时间并减去您获得 Hover 的时间,以查看它是否实际上已经超过两秒。

但是我有两个担忧:

a) 这不是很像黑莓——按住不是黑莓用户经常做的事情。那么这真的是一个很好的用户体验吗?

b) 如果该字段已经具有一些触摸功能,那么您可能会影响该处理,因此您可能必须非常小心您处理的内容(返回 true)以及传递给 super.touchEvent() 的内容。

更新

请注意另一个建议对非触摸手机使用navigationClick/Unclick 的答案。我没有想到这一点,也没有测试过,但这似乎是一个不错的选择。甚至可以在触摸屏手机上工作,而不是使用 touchEvent - 但要注意 Hover 被驱动。

于 2013-09-19T08:53:07.443 回答