ListView OnItemClickListener 不适用于第二个适配器

ListView OnItemClickListener not working on second adapter

我有一个带有 ListView 的片段和此 ListView 上方的两个按钮。这两个按钮调用以下方法,这些方法使用数据源的不同适配器重新加载 ListView。问题在于第二个。调用 showWhenWhere() 时,永远不会触发 onItemClick()。

private void showAtoZ() {
        lineupAdapter = new LineupAdapter(parentView.getContext());
        listView.setAdapter(lineupAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // ListView Clicked item index
                System.out.println("A to Z tapped");
                int itemPosition     = position;
                if(parentActivity != null) {
                    parentActivity.changeFragment(new BandFragment());
                }
            }
        });
        loadData();
    }

    private void showWhenWhere() {
        whenWhereAdapter = new LineupWhenWhereAdapter(parentView.getContext());
        listView.setAdapter(whenWhereAdapter);
        listView.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
                // ListView Clicked item index
                System.out.println("When/Where tapped");
                int itemPosition     = position;
                if(parentActivity != null) {
                    parentActivity.changeFragment(new BandFragment());
                }
            }
        });
        loadData();
    }

更新 - 我确定这是由 whenWhereAdapter 的 XML 引起的,我将其粘贴在下面:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent" android:layout_height="150dp" android:id="@+id/lineupWhenWhereView">

    <ImageView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:id="@+id/bandImageView"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:scaleType="centerCrop"
        android:background="@android:color/darker_gray" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text=""
        android:id="@+id/textView"
        android:background="@drawable/list_row_bg" />

    <TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="Elijah &amp; The Moon"
        android:id="@+id/bandTitle"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:layout_marginLeft="16dp"
        android:layout_marginRight="16dp"
        android:layout_marginStart="16dp"
        android:layout_marginBottom="30dp"
        android:textSize="23sp"
        android:maxLines="2"
        android:textColor="@android:color/white" />

    <RelativeLayout
        android:layout_width="fill_parent"
        android:layout_height="25dp"
        android:layout_alignParentBottom="true"
        android:layout_alignParentLeft="true"
        android:layout_alignParentStart="true"
        android:background="@android:color/black">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="12:00 PM"
            android:id="@+id/whenLabel"
            android:layout_centerVertical="true"
            android:layout_alignParentLeft="true"
            android:layout_alignParentStart="true"
            android:layout_marginLeft="16dp"
            android:layout_marginStart="16dp"
            android:textColor="@android:color/holo_orange_light"
            android:textSize="12sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="|"
            android:id="@+id/divider"
            android:layout_toRightOf="@+id/whenLabel"
            android:layout_toEndOf="@+id/whenLabel"
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:layout_marginBottom="6dp"
            android:layout_alignParentBottom="true"
            android:textIsSelectable="true"
            android:textSize="13sp" />

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="West Stage"
            android:id="@+id/whereLabel"
            android:layout_centerVertical="true"
            android:layout_toRightOf="@+id/divider"
            android:layout_toEndOf="@+id/divider"
            android:layout_marginLeft="10dp"
            android:layout_marginStart="10dp"
            android:textSize="12sp" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="ADD TO SCHEDULE"
            android:id="@+id/addButton"
            android:layout_centerVertical="true"
            android:layout_alignParentRight="true"
            android:layout_alignParentEnd="true"
            android:background="@android:color/transparent"
            android:drawableLeft="@drawable/add_to_schedule"
            android:drawablePadding="5dp"
            android:textColor="@android:color/holo_orange_light"
            android:layout_marginRight="10dp" />
    </RelativeLayout>

</RelativeLayout>

知道为什么这会导致 OnItemClickListener 不起作用吗?

ListView一次只维护一个OnItemClickListener。当您设置第二个侦听器时,只会调用该侦听器。

--------编辑------

看到你的行布局后,我认为你应该设置 android:descendantFocusability="blocksDescendants" 在你的第一个 RelativeLayout 上。

发生这种情况是因为布局中的 TextViews && 按钮阻止了点击事件。