ListView的item包含了一个ImageView和一个TextView。现在想在ListView的item选中状态下,修改item的背景色,ImageView的图片和TextView的文字颜色。
我尝试过使用selector设置背景,但是由于控件组同时只有一个空间能获得焦点,导致seletor无效,所以想请问一下大家同时如何实现该功能?
ListView的item包含了一个ImageView和一个TextView。现在想在ListView的item选中状态下,修改item的背景色,ImageView的图片和TextView的文字颜色。
我尝试过使用selector设置背景,但是由于控件组同时只有一个空间能获得焦点,导致seletor无效,所以想请问一下大家同时如何实现该功能?
如果是我就在getView这里写逻辑(维护一个列表什么的),收到选中事件的时候修改列表然后调用notifyDataSetChanged,因为listView本身有缓存item的设计,修改单个itemView会引起很多问题。
提供一个新的思路供你参考,利用事件分发的方法dispatchTouchEvent()或者onTouchEvent()来处理,在你描述的问题中,当用户点击Item时,其对应的父布局、ImageView、TextView均可拿到分发的事件,但在事件方法中不要做拦截,这样不同控件的背景和色值想怎么变随心所欲了。
3 回答2.6k 阅读✓ 已解决
3 回答4.1k 阅读✓ 已解决
8 回答3.6k 阅读
4 回答2.8k 阅读✓ 已解决
2 回答2.7k 阅读✓ 已解决
3 回答2.5k 阅读✓ 已解决
3 回答1.7k 阅读✓ 已解决
说一下自己的解决方案:其实整体item,ImageView和TextView均是通过设置selector实现的。分别是android:background,android:src,android:textColor.
需要注意两点:
android:textColor里设置selector,里面需要实现的是android:color,而不是android:drawable.
ListView默认是整体item获取焦点,如果子控件没有跟随,需要使用android:duplicateParentState="true"让其获取焦点。