Android-Android ListView中onItemClick无法得到响应?selector中的pressed状态如何进行屏蔽?
我有一个简单的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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(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不需要这么做,因为它默认是可点击的。
是ListItem中的两个组件可以获得焦点引起的,因为每一行当中的两个组件可以获得焦点,以至于ListItem本身不能获得焦点,所以在点击onItemClick事件不会被执行。你在xml中设置一下那两个组件的属性:添加语句android:focusable="false"!应该就可以了。
你可以参考一下这个问题:Android-ListView中的组件Button的OnClick事件触发时机
第一个问题[解法来自 grofis]: 子组件的focusable自动获取,阻塞了listview获取到焦点,所以无法获取到onitemClick事件,解法是为组件设置android:focusable="false"。
第二个问题[解法来自while]: 自己定义imageview,如下:
把 listitem.xml 改成:
第一个imageview是你想要的效果,第二个imageview就是你的问题。