正如主题所暗示的,当使用setOnLongClickListener时,setOnItemClickListener不起作用,我在基本适配器中使用的布局如下,

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
                xmlns:app="http://schemas.android.com/apk/res-auto"
                android:layout_width="match_parent"
                android:layout_height="match_parent"
                android:baselineAligned="false"
                android:descendantFocusability="blocksDescendants"
                android:paddingBottom="20dp"
                android:paddingTop="5dp">


    <com.mikhaellopez.circularimageview.CircularImageView
        android:id="@+id/image1"
        android:layout_width="70dp"
        android:layout_height="70dp"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="2dp"
        android:focusable="false"
        app:border_color="#EEEEEE"
        app:border_width="4dp"/>

    <TextView
        android:id="@+id/name"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/contacts_grid_image"
        android:layout_centerHorizontal="true"
        android:focusable="false"
        android:text="Name"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textSize="11dp"
        android:textStyle="bold"/>

    <TextView
        android:id="@+id/address"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/name"
        android:layout_centerHorizontal="true"
        android:focusable="false"
        android:text="Mobile number"
        android:textAppearance="?android:attr/textAppearanceSmall"
        android:textSize="9dp"/>


</RelativeLayout>


我正在用这个

image.setOnLongClickListener(new View.OnLongClickListener() {
            @Override
            public boolean onLongClick(View v) {
                ClipData.Item item = new ClipData.Item((CharSequence) v.getTag());
                String[] mimeTypes = {ClipDescription.MIMETYPE_TEXT_PLAIN};

                ClipData dragData = new ClipData("test", mimeTypes, item);

                MyDragShadowBuilder myShadow = new MyDragShadowBuilder(holder.image);
                if (groups.size() > holder.position) {
                    v.startDrag(dragData, myShadow, null, 0);

        return true;
            }
        });


还有这个,

gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View v, int position, long id) {

                 Log.i(TAG, "clicked");

            }
        });


现在,当我点击图像时,该项目单击不起作用,但是当我单击文本视图时,它起作用了,我在做什么错呢?

还要注意,当我删除image.setOnLongClickListener()时,整个gridview项将再次变为可单击状态。

最佳答案

这应该是GridView的预期行为,因为子视图是可单击的,即使它仅处理OnLongClick。

作为解决方法,您可以


setOnClickListener使ImageView执行与setOnItemClickListener中相同的操作
考虑使用setOnItemLongClickListener,但这会影响整个RelativeLayout
使用onTouchListener,但这将需要更多的工作

10-07 19:15
查看更多