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 & 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 && 按钮阻止了点击事件。
我有一个带有 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 & 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 && 按钮阻止了点击事件。