我一直在尝试根据从我的数据库解析后的字符串中满足的条件来更改列表视图中行的颜色。我无法理解如何实现这一目标。
我知道似乎有关于如何做到这一点的例子,但我真的很茫然。
我试过这个:
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));
}
}
答案 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<String> arhmAllForList;
private Context context;
public OneRecordCursorAdapter(Context context, ArrayList<String> 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;
}
}