如何使onTouchEvent,长按和上下文菜单协同工作?

问题描述

| 在我们的应用程序中,我们有一个自定义视图(扩展了
ImageView
),并在其中处理触摸事件以记录数据。我想向此视图添加上下文菜单功能,并遵循官方Android文档中的准则。
onTouchEvent
代码本身可以正常工作。上下文菜单代码也可以正常工作。但是,如果我同时添加它们,上下文菜单代码将停止工作。我发现添加了这两个代码后,将永远不会调用
onCreateContextMenu
,因此就不会显示上下文菜单。 根据我对Android文档的解释,从
onTouchEvent
返回
false
表示未使用该事件,因此应将其用于进一步处理。由于某种原因,这里没有发生。如果有人能告诉我我所缺少的,我将不胜感激。顺便说一句,目标是运行2.3.4 ROM的Nexus One。 这是自定义视图中ѭ1的代码:
public boolean onTouchEvent(MotionEvent event) 
{
    switch (event.getAction())
    {
        case  MotionEvent.ACTION_DOWN:
            // Add event coordinates to an arraylist
            break;
    }

    return false;
}
预先感谢您的任何帮助。     

解决方法

        详细说明hackbod的答案,您可能应该将最后一个方法声明为
return super.onTouchEvent(event);
。 我猜想,如果您不处理事件,并且不调用默认的View行为,那么没人会做任何事情,并且什么也不会发生。 返回值的点可能是例如调用某些祖先的默认行为,并让派生类知道祖先是否处理了该事件。 在Android Developers上进行了一些搜索之后,引用该主题会在此处覆盖该View的现有回调方法:   这使您可以为自定义视图中的每个事件定义默认行为,并确定是否应将事件传递给其他子视图。 因此,返回值背后的主要思想是让Android知道是否应将事件传递给子级View。 高温超导 编辑: 关于您在评论中提到的“方向”,通常来说(即,不仅在Android上)UI事件处理过程如下所示: 在某个时候,派生的自定义控件会接收到该事件。在事件挂钩实现中,是否参与祖先的行为取决于您。这就是关于类继承方向的全部内容。 然后,还有另一个方向,一个与UI控件层次结构相关的方向。您的自定义控件可能包含在一个较大的控件容器中,并且您的控件也可能包含其他内部控件(文本框,按钮等)。关于此方向,如果您声明不处理事件(返回false),则UI事件处理机制会将存储桶传递给包含(?)控件(请以您的背景为准)。     ,        您可以从长按监听器中拨打电话,
openContextMenu(View view)
http://developer.android.com/reference/android/app/Activity.html#openContextMenu(android.view.View)     ,        不要在
OnCreate()
中注册上下文菜单,请在
onTouch()
中进行注册 返回true;
registerForContextMenu(View v);
openContextMenu(View v);
return true;
    ,        返回false告诉父母您没有使用该事件。 View的默认实现为该视图实现触摸处理。如果要执行,则必须调用super.onTouchEvent(event);。     ,        我最近遇到类似的问题。当我在
RecyeclerView
的孩子中启用长期可点击时,在
RecyclerView
onTouchEvent
中不会收到
ACTION_DOWN
事件。 如果我改成
RecyclerView
的ѭ17I,我会工作。可以接收“ 13”事件。     

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...