ListView中的Android ImageButton阻塞onItemClick()

时间:2015-01-10 01:51:46

标签: android

我正在尝试添加一个包含ImageButton的ListView。一切正常,除了我的onItemClick()没有被调用。我已经用Google搜索并在StackOverflow上搜索了

的建议
android:descendantFocusability="blockDescendants"

android:focusable="false"

我已经尝试了这两种方法,但都没有工作。这是我的布局文件。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="@dimen/listview_item_height"
    android:descendantFocusability="blocksDescendants" >

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:paddingStart="@dimen/activity_horizontal_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingEnd="@dimen/activity_horizontal_margin"
        android:layout_gravity="center_vertical"
        android:orientation="vertical" >

        <TextView
            android:id="@+id/song_title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/listview_item_title_text_size"
            android:textColor="@color/text_primary"
            android:ellipsize="end"
            android:singleLine="true"
            android:lines="1" />

        <TextView
            android:id="@+id/song_artist"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textSize="@dimen/listview_item_subtitle_text_size"
            android:textColor="@color/text_secondary"
            android:ellipsize="end"
            android:singleLine="true"
            android:lines="1" />

    </LinearLayout>

    <TextView
        android:id="@+id/song_duration"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical" />

    <ImageButton
        android:id="@+id/overflow_menu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center_vertical"
        android:padding="8dp"
        android:background="?android:selectableItemBackground"
        android:src="@drawable/ic_action_overflow"
        android:scaleX="0.75"
        android:scaleY="0.75" />

</LinearLayout>

然后我的onItemClick()只记录被点击元素的id。

@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id)
{
    long id = adapter.getItemId(position);
    Log.d(TAG, id + "");
}

我从来没有在控制台中获得输出。当我点击该项目时,我确实得到了可选择的背景。在代码中添加“blocksDescendants”之前我没有得到。感谢任何帮助,因为我已经花了一些时间。

2 个答案:

答案 0 :(得分:0)

您可以使用imagsView而不是imageButton,并在单击列表项时执行onClick操作

或者

在布局在视图适配器中膨胀后设置onClickListener。 阅读本文:http://androidforbeginners.blogspot.it/2010/03/clicking-buttons-in-listview-row.html?m=1 此外,这应该设置为让系统监听点击:

ListView可聚焦 android:focusable="true"

按钮不可聚焦 android:focusable="false"

或者

您可以在xml中使用它。单击时,它将在同一活动中查找您的方法。不适用于碎片。 android:onClick="myMethod"

答案 1 :(得分:0)

您是否尝试过使用ImageView?这样,默认情况下它不会拦截您的点击次数。

或者您可以尝试使用onInterceptTouchEvent。 http://developer.android.com/training/gestures/viewgroup.html