0

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

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

我试过这个:

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));
    }


} 
4

3 回答 3

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;
    }
}
于 2013-02-28T16:09:21.547 回答
0

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

在 Web 上有几个编写自定义适配器的教程:

于 2013-02-28T12:30:27.763 回答
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);
于 2013-02-28T12:53:01.753 回答