ListView如何同时修改选中item的背景色和item中ImageView的背景图片,TextView的字体颜色

王正一
  • 1.6k

ListView的item包含了一个ImageView和一个TextView。现在想在ListView的item选中状态下,修改item的背景色,ImageView的图片和TextView的文字颜色。

我尝试过使用selector设置背景,但是由于控件组同时只有一个空间能获得焦点,导致seletor无效,所以想请问一下大家同时如何实现该功能?

回复
阅读 4.3k
5 个回答
✓ 已被采纳

说一下自己的解决方案:其实整体item,ImageView和TextView均是通过设置selector实现的。分别是android:background,android:src,android:textColor.
需要注意两点:

  1. android:textColor里设置selector,里面需要实现的是android:color,而不是android:drawable.

  2. ListView默认是整体item获取焦点,如果子控件没有跟随,需要使用android:duplicateParentState="true"让其获取焦点。

ImageView与TextView都加上这个属性:

android:duplicateParentState="true"

如果是我就在getView这里写逻辑(维护一个列表什么的),收到选中事件的时候修改列表然后调用notifyDataSetChanged,因为listView本身有缓存item的设计,修改单个itemView会引起很多问题。

提供一个新的思路供你参考,利用事件分发的方法dispatchTouchEvent()或者onTouchEvent()来处理,在你描述的问题中,当用户点击Item时,其对应的父布局、ImageView、TextView均可拿到分发的事件,但在事件方法中不要做拦截,这样不同控件的背景和色值想怎么变随心所欲了。

iamgeView和textView总有父布局吧?那么你就设置这个父布局的点击监听,监听到了,不就可以修改图片或者文字了?

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏