Android ListView多选模式下修改选中项背景色问题求助
解决ListView(simple_list_item_activated_1样式)选中项背景色跳回默认的问题
我之前也遇到过一模一样的问题!当用带多选功能的simple_list_item_activated_1样式ListView时,想改选中项的背景色怎么都不对——设置listSelector之后,点击瞬间能看到自定义的红色,但马上就跳回系统默认的绿色,哪怕写了包含各种状态的自定义selector也没用。
问题复现
- 使用支持多选的
simple_list_item_activated_1样式ListView,想要将选中项背景色改为红色(@color/highlight) - 尝试直接设置
android:listSelector="@color/highlight":点击列表项初始显示正确红色,但随即变回默认绿色 - 尝试自定义状态选择器
search_background.xml(包含state_pressed、state_checked、state_activated、state_selected等状态),设置android:listSelector="@drawable/search_background"后问题依旧
解决方法
直接在ListView的Item点击监听器中,手动根据选中状态设置背景色即可解决这个冲突问题,代码如下:
// ListView Item Click Listener listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { int itemPosition = position; if (!listView.isItemChecked(position)){ // 处理之前选中、现在取消选中的项 view.setBackgroundColor(Color.parseColor("#000000")); } else { // 处理之前未选中、现在选中的项 view.setBackgroundColor(Color.parseColor("#CC3300")); } } });
原理是simple_list_item_activated_1的内置布局会自动处理激活状态的样式,和listSelector的状态逻辑存在冲突,手动在点击时根据isItemChecked()的结果设置背景色,就能稳定保持选中后的自定义颜色了。
内容的提问来源于stack exchange,提问作者Nicholas Farmer
相关产品推荐
相关产品推荐

