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

Android ListFragment中SimpleAdapter隔行变色失效,求简便解决方法

解决列表隔行变色的问题

嘿,我来帮你搞定这个列表隔行变色的问题~你的代码没生效主要有几个小问题,咱们一步步捋清楚:

你的代码存在的问题

  • 没有正确获取/初始化View:在getView方法里,你直接操作传入的v,但当v为null(也就是第一次加载该行或者没有可复用的View时),这样操作会导致空指针,而且也没利用好SimpleAdapter的View复用机制。你需要先调用super.getView()拿到正确的View实例。
  • 颜色值格式错误:你写的920000是十进制数值,但Android中颜色是ARGB格式的int值,正确的写法应该是十六进制,比如0xFF920000(前面的FF代表完全不透明的透明度)。
  • 未重置奇数行的背景色:如果只给偶数行设置颜色,当View被复用时,奇数行可能会保留之前复用的偶数行的颜色,导致显示异常,所以奇数行也要明确设置默认背景色。

修正后的代码

new SimpleAdapter(Activity.this, listElements, R.layout.list, 
    new String[]{"dt", CONTENT, TIMESTAMP}, 
    new int[]{R.drawable.dt, R.id.content, R.id.timestamp}) {
    
    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        // 先调用super获取已初始化或复用的View
        View v = super.getView(position, convertView, parent);
        
        // 根据位置设置背景色
        if (position % 2 == 0) {
            // 偶数行设置自定义颜色(注意用ARGB十六进制)
            v.setBackgroundColor(0xFF920000);
        } else {
            // 奇数行设置默认背景色,比如白色或者你的列表默认背景
            v.setBackgroundColor(Color.WHITE);
        }
        
        return v;
    }
};

其他更简便的方案

如果你觉得在Adapter里写逻辑有点麻烦,还可以试试这些方法:

  • 使用Drawable Selector:创建一个list_item_bg.xml放在drawable目录下,通过自定义状态区分奇偶行(不过对于ListView的SimpleAdapter来说,还是上面的方法更直接)。
  • 如果后续切换到RecyclerView:可以自定义ItemDecoration,在onDraw方法中给奇偶行绘制背景,这样Adapter的代码会更干净。

内容的提问来源于stack exchange,提问作者greencucumber1

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:46:14