Android-Android ListView中onItemClick无法得到响应?selector中的pressed状态如何进行屏蔽?

Web程序数据库 Web程序数据库 主题:1214 回复:2505

Android-Android ListView中onItemClick无法得到响应?selector中的pressed状态如何进行屏蔽?

泛泛之交 发布于 2016-12-27 字数 981 浏览 1146 回复 3

我有一个简单的ListView,layout如图所示:

请输入图片描述
其中两个子组件的背景都是设置了selector的:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="600px"
android:layout_height="200px"
android:orientation="horizontal"
android:background="@drawable/ic_action_search" >
<ImageView
android:id="@+id/image"
android:layout_width="100px"
android:layout_height="100px"
android:background="@drawable/select"
android:focusable="false"
/>
<Button
android:id="@+id/button"
android:layout_width="100px"
android:layout_height="100px"
android:background="@drawable/select"
android:focusable="false"
/>
</LinearLayout>

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

支持 Markdown 语法,需要帮助?

评论(3

灵芸 2017-07-12 3 楼

总结下LZ的需求。
1.点击Item的image和button的时候,各自响应自己的点击事件,并且背景作出相应改变。
2.点击Item其余部分时,响应onItemClick事件,整个Item的背景作出改变,但image和button的背景不变。

理解的没错吧?

解决方法:

1.在Item的layout里,加上:android:descendantFocusability="blocksDescendants"。

2.因为已经在代码里给ImageView注册了点击事件,所以ImageView自动变成为Clickable了,如果没有这一步,需要在给ImageView补上 android:clickable="true"。Button不需要这么做,因为它默认是可点击的。

浮生未歇 2017-06-14 2 楼

是ListItem中的两个组件可以获得焦点引起的,因为每一行当中的两个组件可以获得焦点,以至于ListItem本身不能获得焦点,所以在点击onItemClick事件不会被执行。你在xml中设置一下那两个组件的属性:添加语句android:focusable="false"!应该就可以了。
你可以参考一下这个问题:Android-ListView中的组件Button的OnClick事件触发时机

偏爱自由 2017-05-06 1 楼

第一个问题[解法来自 grofis]: 子组件的focusable自动获取,阻塞了listview获取到焦点,所以无法获取到onitemClick事件,解法是为组件设置android:focusable="false"。

第二个问题[解法来自while]: 自己定义imageview,如下:

public class CIV extends ImageView {
public CIV(Context context, AttributeSet attrs) {
    super(context, attrs);
}

@Override
public void setPressed(boolean pressed) {
    // If the parent is pressed, do not set to pressed.
    if (pressed &amp;&amp; ((View) getParent()).isPressed()) {
        return;
    }
    super.setPressed(pressed);
}

}

把 listitem.xml 改成:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:orientation="horizontal" >
    <com.example.listviewfor.CIV
        android:id="@+id/image"
        android:layout_width="100px"
        android:layout_height="100px"
        android:background="@drawable/select"/>
    <ImageView
        android:id="@+id/button"
        android:layout_width="100px"
        android:layout_height="100px"
        android:background="@drawable/select" />
</LinearLayout>

第一个imageview是你想要的效果,第二个imageview就是你的问题。