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

时间:2016-05-24 21:33:41

标签: android android-xml android-listfragment android-scrollview

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

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

当我删除Horizo​​ntalScrollViews时,一切正常。这意味着只需放置TextView而不使用Horizo​​ntalScrollView。

日志不会出现错误或警告。问题应该来自不在Java代码中的XML。

<!-- 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放在根视图中,并且没有放入任何内容,也没有定义任何大小。所以它只是整个布局的一部分,但没有用途。即使是现在,Horizo​​ntalScrollView也会阻止ListFragment项目,因此我无法长按触摸/按下以打开ContextMenu。如果我删除它,问题就消失了。

1 个答案:

答案 0 :(得分:0)

EDITED

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 - HorizontalScrollView你真的需要TextView吗?看这个HorizontalScrollView references

希望它有所帮助!