【问题标题】:Android Cannot dispatch touch events to SpinnerAndroid 无法将触摸事件分派给 Spinner
【发布时间】:2013-03-13 15:56:05
【问题描述】:

我正在编写一个 Android JUnit 测试,它遍历 MotionEvents 列表并将它们分派给被测活动。对于大多数事件,我可以只使用 activity.dispatchTouchEvent(MotionEvent) 方法。对于对话框,我必须在内存中获取对话框并直接调用dispatchTouchEvent。我在使用 android.widget.Spinner 对象时遇到问题。 dispatchTouchEvent 方法似乎被忽略了。

例如,一个 Spinner (Mode = DIALOG) 出现在屏幕上,测试代码正在调度一个具有正确 (x, y) 坐标和动作(ACTION_DOWN 后跟 ACTION_UP)的 MotionEvent:

Spinner spinner = (Spinner) activity.findViewById(R.id.spinnerId);
spinner.dispatchTouchEvent(motionEvent); //returns true, but Spinner has not been touched

View v = spinner.getChildAt(0);
v.dispatchTouchEvent(motionEvent);  //returns false, Spinner has not been touched

目前,我正在使用 Robotium 直接单击 Spinner,但这不是长期需要的。有什么建议吗?

【问题讨论】:

  • 为什么不使用 spinner.performClick();而不是 spinner.dispatchTouchEvent(motionEvent); ?
  • 这个想法是捕捉所有的运动事件。 (例如 ACTION_DOWN、ACTION_UP、ACTION_MOVE)。用户可以在做出选择之前滚动浏览 Spinner。

标签: java android junit spinner motionevent


【解决方案1】:

因此,也许您可​​以在 Activity 级别执行调度事件,以 x,y 的形式传递,例如微调器的中心(Robotium 会这样做,但通过 Instrumentation 而不是 Activity 传递motionEvent)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-24
    • 1970-01-01
    相关资源
    最近更新 更多