You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.13 08:20:39