ListView OnItemClickListener无法在第二个适配器上工作

时间:2015-01-07 15:44:10

标签: android android-listview

我有一个带有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不起作用吗?

1 个答案:

答案 0 :(得分:2)

ListView只保留一个OnItemClickListener。设置第二个侦听器时,只会调用该侦听器。

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

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

这是因为TextViews&amp;&amp;布局内的按钮阻止了点击事件。