Android-OnClickListener和OnLongClickListener的问题

Android-OnClickListener和OnLongClickListener的问题,android,layout,onclicklistener,onlongclicklistener,Android,Layout,Onclicklistener,Onlongclicklistener,我首先对布局进行充气,然后使用addView()将视图添加到布局中。布局上附加了一个OnLongClickListener 如果我现在将OnClickListener添加到内部视图中,OnLongClickListener将不再触发。我怎样才能解决这个问题 示例代码: View someLayout = getLayoutInflater().inflate(R.layout.some_layout, null); someLayout.setOnLongClickListener(new O

我首先对布局进行充气,然后使用addView()将视图添加到布局中。布局上附加了一个OnLongClickListener

如果我现在将OnClickListener添加到内部视图中,OnLongClickListener将不再触发。我怎样才能解决这个问题

示例代码:

View someLayout =  getLayoutInflater().inflate(R.layout.some_layout, null);
someLayout.setOnLongClickListener(new OnLongClickListener() {

    @Override
    public boolean onLongClick(View arg0) {
            ...
        return true;
        }
});

TextView innerView = new TextView(this);

innerView.setText("JustSomeTextThatDoesNotMatter");
innerView.setOnClickListener(new OnClickListener() {    
    @Override
        public void onClick(View arg0) {
            ...
    );
}
});

((FrameLayout) view.findViewById(R.id.framelayout)).addView(innerView);
布局

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:gravity="center" >

    <FrameLayout
        android:id="@+id/framelayout"
        android:layout_width="300dp"
        android:layout_height="wrap_content">
    </FrameLayout>

</LinearLayout>

有什么想法吗?这似乎真的很奇怪

更新:当我使用onTouchListener而不是onLongClickListener时也会发生同样的情况,内部视图中的OnClickListener会使用所有触摸事件


这是故意的吗?基本上,我想要的是ContextMenu为ListView提供的相同功能。

可点击的
视图
会消耗所有触摸事件,并防止它们返回到父级。因此,在包含可点击
视图的版面的整个区域上注册长时间点击的唯一方法是在版面内的每个可点击
视图上注册侦听器。

最简单的解决方案是将相同的OnLongClickListener添加到innerView。更复杂的解决方案是在父LinearLayout中实现touch-onInterceptTouchEvent()方法,并在那里实现LongPressListener。只需确保您遵循onLongClickListener返回值规则。这意味着,如果要将长时间单击传递给父视图,则返回false,否则返回true。我假设
OnLongClick()
监听器不再只为
TextView
启动,但在布局的其他地方可以吗?首先,请尝试了解您的情况下需要什么,是通过OnClick事件还是在单击TextView时通知某些函数(通常在单击布局时启动)。所以你可以绕过它,或者像@Beworker建议的那样尝试拦截TouchEvent。希望这对你有所帮助,祝你愉快work@beworker我需要将LongClickListener附加到外部类。OnTouch侦听器可以工作,但我希望避免这种手动解决方案。rAvinder:OnClickListener消耗OnLongClicklistener,而不是相反。OnClickLister是返回类型void Kerry:没有测试,但是当我删除OnClickLister时,它会再次工作,所以可能是的。感谢您的澄清。那么ContextMenu模式是如何工作的呢?如果在列表视图上调用registerForContextMenu,则所有长时间单击都会被捕获,而不管列表项中是否有CLickListeners。@PhilippEbert:注册
上下文菜单
(无论是在
列表视图
上还是在其他地方),除了使视图可长时间单击之外,没有任何特殊功能,所以它不应该有任何不同的行为。谢谢。如果在文档中对此进行了解释,那就太好了。@corsair992我正试图解决一个类似的问题。如果您有任何见解或想法,我将不胜感激: