2013-02-28 3 views
0

Я пытаюсь изменить цвет моих строк в списке в зависимости от состояния, которое выполняется из моей разборной строки моей базы данных. Я не могу понять, как это сделать.Изменение цвета дочерней строки списка в android

Я знаю, что есть примеры того, как это сделать, но я действительно в недоумении.

Я попытался это:

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

Вы должны написать свой собственный Adapter для ListView. В вашем адаптере вы можете установить цвет фона для каждого элемента без проблем.

Есть несколько руководств для написания специального адаптера на веб-сайте:

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); 
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; 
    } 
} 
Смежные вопросы