我有一个CardScrollView,其中有多个项目,我希望能够在一个项目上拉出一个菜单,类似于内置的时间轴。
我知道Card不能附加特定的菜单,所以我在活动级别准备了菜单。
然而,似乎有什么东西正在吞噬所有的onKeyDown事件。
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);
}
}发布于 2013-11-25 09:25:36
如果你只需要在CardScrollView中简单地轻敲一张卡,你可以调用setOnItemClickListener来附加一个AdapterView.OnItemClickListener,就像你使用标准的安卓ListView一样。对于这种基本用例,这通常比使用GestureDetector简单得多。
发布于 2013-11-25 08:18:28
昨天我遇到了同样的问题。我用GestureDetector解决了这个问题,正如GDK文档所建议的那样。下面是我使用的代码:
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;
}您的菜单现在应该打开了!
https://stackoverflow.com/questions/20181016
复制相似问题