首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CardScrollView上接收触摸事件

在CardScrollView上接收触摸事件
EN

Stack Overflow用户
提问于 2013-11-25 05:08:04
回答 2查看 1.8K关注 0票数 4

我有一个CardScrollView,其中有多个项目,我希望能够在一个项目上拉出一个菜单,类似于内置的时间轴。

我知道Card不能附加特定的菜单,所以我在活动级别准备了菜单。

然而,似乎有什么东西正在吞噬所有的onKeyDown事件。

代码语言:javascript
复制
public class HostsView extends CardScrollView {
  private String TAG = "HostsView";
  private HostsCardScrollAdapter cards;
  private Activity parent;

  public HostsView(Activity parent, HostDatabase hostDb) {
    super(parent);
    cards = new HostsCardScrollAdapter(parent);
            //populates the cards and what not
    this.setAdapter(cards);
    this.activate();
  }

  @Override
  public boolean onKeyDown(int keyCode, KeyEvent event) {
                  //I never see this log
    Log.d(TAG, "Key event " + event.toString());
    if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER) {
        parent.openOptionsMenu();
        return true;
    }
    return super.onKeyDown(keyCode, event);
  }
}
EN

回答 2

Stack Overflow用户

发布于 2013-11-25 09:25:36

如果你只需要在CardScrollView中简单地轻敲一张卡,你可以调用setOnItemClickListener来附加一个AdapterView.OnItemClickListener,就像你使用标准的安卓ListView一样。对于这种基本用例,这通常比使用GestureDetector简单得多。

票数 4
EN

Stack Overflow用户

发布于 2013-11-25 08:18:28

昨天我遇到了同样的问题。我用GestureDetector解决了这个问题,正如GDK文档所建议的那样。下面是我使用的代码:

代码语言:javascript
复制
private GestureDetector mGestureDetector;

@Override
public void onCreate(Bundle savedInstanceState) {
mGestureDetector = createGestureDetector(this);
}


private GestureDetector createGestureDetector(Context context) {
    GestureDetector gestureDetector = new GestureDetector(context);
    gestureDetector.setBaseListener( new GestureDetector.BaseListener() {
        @Override
        public boolean onGesture(Gesture gesture) {
            if (gesture == Gesture.LONG_PRESS || gesture == Gesture.TAP) {
                Log.d(MainActivity.TAG, "Tap"); //When I tap the touch panel, I only get LONG_PRESS
                openOptionsMenu();
                return true;
            } else if (gesture == Gesture.TWO_TAP) {

                return true;
            } else if (gesture == Gesture.SWIPE_RIGHT) {

                return true;
            } else if (gesture == Gesture.SWIPE_LEFT) {

                return true;
            }
            return false;
        }
    });
    return gestureDetector;
}

@Override
public boolean onGenericMotionEvent(MotionEvent event) {
    if (mGestureDetector != null) {
        return mGestureDetector.onMotionEvent(event);
    }
    return false;
}

您的菜单现在应该打开了!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20181016

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档