更改android中listview的子行的颜色

时间:2013-02-28 12:18:11

标签: android listview

我一直在尝试根据从我的数据库解析后的字符串中满足的条件来更改列表视图中行的颜色。我无法理解如何实现这一目标。

我知道似乎有关于如何做到这一点的例子,但我真的很茫然。

我试过这个:

Calms info = new Calms(this);

info.open();
String data = info.getFlareData();
info.close();

String arr[] = data.split("..\n\n");
System.out.println(arr);

ListView listView = getListView();

System.out.println("$$$$$$$$$$$$$$$"+listView.getChildCount()+"$$$$$$$$$$$$$$");
setListAdapter(new ArrayAdapter<String>(this, R.layout.simple_list_item_1, arr));

//System.out.println("****************"+getListView().getChildCount()+"**************");


for(int i = 0; i < arr.length; i++){
    System.out.println("arr["+i+"] = " + arr[i].trim());

    if(arr[i].contains("High Severity"))
    {
        // String highArr = arr[i];
        listView.getChildAt(i).setBackgroundColor(Color.RED);
    }
    else if(arr[i].contains("Low Severity"))
    {
        listView.getChildAt(i).setBackgroundColor(Color.GREEN);
    }
    else if(arr[i].contains("Medium Severity"))
    {
        listView.getChildAt(i).setBackgroundColor(Color.rgb(255, 136, 0));
    }


} 

3 个答案:

答案 0 :(得分:0)

您应该为Adapter编写自己的ListView。在您的适配器中,您可以毫无问题地为每个项目设置背景颜色。

有几个教程可以在网上编写自定义适配器:

答案 1 :(得分:0)

试试这个:

ArrayAdapter<String> ad = new ArrayAdapter<String>(this, R.layout.simple_list_item_1, arr){
            @Override
            public View getView(int position, View convertView, ViewGroup parent) {

                TextView tv =  (TextView) super.getView(position, convertView, parent);
                String str = tv.getText().toString();

                if(str.contains("High Severity"))
                {
                    // String highArr = arr[i];
                    tv.setBackgroundColor(Color.RED);
                }
                else if(str.contains("Low Severity"))
                {
                    tv.setBackgroundColor(Color.GREEN);
                }
                else if(str.contains("Medium Severity"))
                {
                    tv.setBackgroundColor(Color.rgb(255, 136, 0));
                }
                return tv;
            }
        };

        setListAdapter(ad);

答案 2 :(得分:0)

您需要扩展ArrayAdapter。方法:

public View getView(int position, View convertView, ViewGroup parent)

您可以更改行的颜色。一些例子:

public class OneRecordAdapter extends ArrayAdapter<String> {

private ArrayList&lt;String&gt; arhmAllForList;
    private Context context;
public OneRecordCursorAdapter(Context context, ArrayList&lt;String&gt; hm) {
        super(context, R.layout.raw_checking_knowledge, hm);
        arhmAllForList = hm;
        this.context = context;
    }
@Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        View rowView = inflater.inflate(
                R.layout.row, parent, false);
        ...
        if ( /*some condition*/ ) {
            rowView.setBackgroundColor(Color.RED);
        } else {
            rowView.setBackgroundColor(Color.GREEN);
        }
        ...
        return rowView;
    }
}