由于 Horizo​​ntalScrollView,ListFragment 中的 ContextMenu 忽略了 longPress。怎么解决?

ContextMenu in ListFragment ignoring longPress because of HorizontalScrollView. How to solve?

我正在为 Android 应用程序处理 XML 设计文件,我的 ListFragment (android.support.v4.app.ListFragment) 出现问题。

问题: 如果我将 Horizo​​ntalScrollView 添加到我的 XML 布局(将我的 TextView 放入其中),则长按列表中的一个项目将不会打开 ContextMenu (android.view.ContextMenu)。

当我删除 Horizo​​ntalScrollViews 时一切正常。这意味着只放置 TextView 而没有 Horizo​​ntalScrollView。

日志没有给出错误或警告。问题应该来自 XML 而不是 Java 代码。

<!-- main root-->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:padding="16dp"
android:background="@color/colorWhite">

<!-- SOME MORE STUFF .... -->

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentTop="true"
    android:layout_alignParentStart="true"
    android:id="@+id/linearLayout1"
    android:layout_alignParentLeft="true"
    android:layout_marginRight="8dp"
    android:layout_toLeftOf="@+id/tv_activity_date">

    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:id="@+id/imageView14"
        android:src="@drawable/ic_short_text_black_18dp"
        android:layout_marginRight="5dp"
        android:layout_alignParentTop="true"
        android:layout_alignParentStart="true" />

    <HorizontalScrollView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:scrollbarSize="0dp" >
    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="type"
        android:id="@+id/tv_activity_type"
        android:textColor="@color/colorAccent" />
    </HorizontalScrollView>

</LinearLayout>

<!-- SOME MORE STUFF .... -->
</RelativeLayout>

所以,它可能以某种方式挡住了视线。有人找到解决方案了吗?提前致谢 ! :)

编辑: 我尝试将 Horizo​​ntalScrollView 放在根 View 中,但没有放入任何内容,也没有定义大小。所以它只是整个布局的一部分,但没有用处。即使是现在,Horizo​​ntalScrollView 也会阻止 ListFragment 项目,所以我无法长时间 touch/press 打开 ContextMenu。如果我删除它,问题就消失了。

已编辑

This 是正确答案,并且工作正常。

将此代码添加到您的 OnCreate()OnCreateView()

 final HorizontalScrollView horizontalScrollView = (HorizontalScrollView)findViewById(R.id.horizontal);

    registerForContextMenu(horizontalScrollView);

    GestureDetector.OnGestureListener listener = new GestureDetector.SimpleOnGestureListener() {
        @Override
        public void onLongPress(MotionEvent e)
        {
            openContextMenu(horizontalScrollView);
            Toast.makeText(MainActivity.this, "LongClick", Toast.LENGTH_SHORT).show();
        }
    };

    final GestureDetector gestureDetector = new GestureDetector(this, listener);

    horizontalScrollView.setOnTouchListener(new View.OnTouchListener() {
        @Override
        public boolean onTouch(View v, MotionEvent event)
        {
            return gestureDetector.onTouchEvent(event);
        }
    });

1-您是否在 registerforContextMenu() 中设置了正确的视图?

2-如果您的 TextView(长按后)打开上下文菜单,可能需要 setLongClickable() 您的 HorizontalScrollView。试试这个 answer

3-你真的需要 HorizontalScrollViewTextView?看这个HorizontalScrollView references

希望对您有所帮助!