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

发布于 2016-12-27 05:58:55 字数 971 浏览 1338 评论 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>

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

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

评论(3

灵芸 2017-07-12 12:45:04

总结下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 17:27:07

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

偏爱自由 2017-05-06 14:54:09

第一个问题[解法来自 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 && ((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就是你的问题。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文