动态更改ListView的背景色

3

我需要根据字符串值(JSON)动态更改列表视图的背景颜色。如果TAG_SEVERITY字段中的文本为“critical”,则要更改背景颜色。以下是我的尝试方式,但是使用代码时它会将严重性字段更改为蓝色,而不考虑文本内容。最好更改行颜色而不是字段背景颜色。我对此还很陌生。

    SimpleAdapter adapter = new SimpleAdapter(this, mCommentList,
            R.layout.single_post, new String[] {TAG_SEVERITY, TAG_TITLE }, new int[] { R.id.severity, R.id.rTitle});adapter.setViewBinder(new SimpleAdapter.ViewBinder() {

        @Override
        public boolean setViewValue(View view, Object data,
                String textRepresentation) {
            int v=view.getId();
            if(v==R.id.severity && String.valueOf(data.toString()).contentEquals("Critical")){
                ((View) view.getParent()).setBackgroundColor(Color.BLUE);
            }
            TextView TV=(TextView) view;
            TV.setText(data.toString());
            return true;
        }
    });

    setListAdapter(adapter);

你尝试过设置断点来查看为什么它进入了if语句,而你认为它不应该进入吗?这个字符串的值总是有关键性的原因吗? - Adam Johns
我已经检查了Json字符串,它并不总是“关键”的。 - user2602159
但是如果在 if 语句执行时设置断点呢? - Adam Johns
1个回答

1
我认为通过为view.getParent()设置背景,你是在为整个ListView设置背景。你尝试过只使用view.setBackground()吗?
另一个选择是创建自己的适配器类,并在getView()方法中根据严重程度设置视图的背景颜色。

会尝试一下,但是String.valueOf(data.toString()).contentEquals("Critical")不起作用。有什么想法吗? - user2602159
当你说它不起作用时,它是返回语法错误、运行时错误还是逻辑错误? - Jace J McPherson
没有问题,程序可以运行,但是“severity”字段的颜色无论文本内容如何都是蓝色。 - user2602159
所以,对我来说,你的ListView似乎有一个文本和一个子文本,其中文本是严重级别,而子文本是有关该项的更多信息?此外,这个代码片段在哪里?onCreate()中吗? - Jace J McPherson
它在Resume()上,JSON文本接收到TAG_SEVERITY并显示在R.id.severity处。 - user2602159
你可能需要调试代码并检查你正在测试的字符串是否实际上包含了正确的信息。此外,可能会有一些奇怪的空格或其他东西,但除此之外我不确定,对于无法提供帮助感到抱歉。 - Jace J McPherson

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接