0

我正在使用表格布局来显示数据,但我希望它的行为类似于列表项(选择能力、选择更改背景时、单击时、具有悬停效果、可单击)为此我正在使用以下侦听器

  • OnClickListener(to perform action)
  • OnFocusChangeListener(To change background color)
  • OnTouchListener(to focus specific row)

现在的问题是,当用户触摸任何项目时,它首先获得焦点,然后必须再次触摸才能触发 onclick 事件,为了解决这个问题,我进行了更改,并且 ontouch 我触发了特定于行的操作。

@Override
public boolean onTouch(View v, MotionEvent event) {
    if (event.getAction() != MotionEvent.ACTION_UP){
        v.requestFocus();
        int viewId= v.getId();
        handleEvent(viewId);//Switch cases to perform row specific actions.
    }
    return false;
}

现在,如果用户触摸行事件会触发完美的工作,但是当甚至用户想要通过将手指拖动到屏幕事件上向下滚动数据时,这里会出现另一个问题ontouch......虽然用户认为它会自动执行操作scroll down屏幕。

4

1 回答 1

1

我不知道此解决方案是否适用于您的情况,但也许您可以这样做:假设用户单击了您的项目(因此您的 OnTouch() 方法可能会获得三个事件序列:ACTION_ DOWN,ACTION_ MOVE(不一定)和 ACTION_UP。现在您可以做出相应的反应。

  1. 如果是 ACTION_DOWN,则可以保存 x 和 y 坐标。
  2. 如果是 ACTION_MOVE,则取其 x 和 y 并计算与对应 ACTION_DOWN 的距离。如果它比某个假定值长,则进行滚动并设置指示项目已滚动的标志。
  3. 如果是 ACTION_UP,请检查您的标志。如果项目未滚动,请触发您的操作并清除标志。

可能计算不是您在 ACTION_MOVE 事件中应该做的,因为它应该很快,但试一试。
问候!

于 2009-12-18T08:29:42.747 回答