我正在尝试添加一个包含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”之前我没有得到。感谢任何帮助,因为我已经花了一些时间。
答案 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