2012-12-16 30 views
5

Pobieram z bazy danych moją wydajność pływania. Chciałbym zmienić kolor tła jednego pola zgodnie z jego wartością. Na przykład, jeśli pływam 4 okrążenia, chcę mieć kolor tła. Próbuję tego kodu, który poprawnie ustawia tło, ale tekst znika.Android - SimpleCursorAdapter.ViewBinder - Ustaw kolor tła

 String[] columns = new String[] { "swimm_pos", "swimm_date","swimm_lap", "swimm_stroke", "swimm_time", "swimm_media", "swimm_efficiency", "swimm_note" }; 
     int[] to = new int[] { R.id.row_counter, R.id.swimm_date, R.id.swimm_lap, R.id.swimm_stroke, R.id.swimm_time, R.id.swimm_medialap, R.id.swimm_efficiency, R.id.swimm_note}; 

     SimpleCursorAdapter adapter = new SimpleCursorAdapter(
      this, 
      R.layout.contacto_list_item, 
      cursor, 
      columns, 
      to); 

     adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 
      public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
       if (view.getId() == R.id.swimm_lap) 
       { 
        int color = cursor.getInt(columnIndex); 
        String s = String.valueOf(color); 
        if (s.equals("4")) { 
        TextView tv = (TextView)view; 
        tv.setBackgroundColor(0xFF558866);} 
       return true; 

      } 
       return false;} 

     }); 

i jest również możliwe, gdy lap jest równa 4 Ustaw kolor tła innej dziedzinie, na przykład w moim kodu: R.id.swimm_pos? dziękuję.

Odpowiedz

3

Zwrócenie wartości true z programu ViewBinder powoduje, że również wiążesz dane z widokiem.

Ale w twoim przypadku nie ustawiasz tekstu R.id.swimm_lap.

Więc dodać setText przed instrukcji return

tv.setText(s); 
return true; 

Edit: Na drugie pytanie załóżmy, że chcemy zmienić tło R.id.row_counter zależności od pływania kolanach następnie dodać

else if (view.getId() == R.id.row_counter){ 
int color = cursor.getString(cursor.getColumnIndex("swimm_lap")); 
if (s.equals("4")) { 
    view.setBackgroundColor(0xFF558866); 
} 
} 
+0

Dziękuję, Perfect. a na drugie pytanie można dodać coś takiego: TextView tv = (TextView) findViewById (R.modificacontatto.edswimm_pos); – lucignolo

+0

Edytowałem odpowiedź, domyślam się, że po prostu zmieniając kolor, możesz zwrócić false zamiast ustawiania tekstu, ale jeśli to nie zadziała, będziesz musiał ustawić tekst też – nandeesh

0

Solved , tutaj właściwy kod:

  adapter.setViewBinder(new SimpleCursorAdapter.ViewBinder() { 
      public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
       if (view.getId() == R.id.row_counter) 
       { 
        int color = cursor.getInt(cursor.getColumnIndex("swimm_lap")); 
        String s = String.valueOf(color); 
        if (s.equals("4")) { 
        TextView tv = (TextView)view; 
        tv.setBackgroundColor(0xFF558866); 
           } 
       return true; 
      } 
       return false;} 
     }); 
    this.setListAdapter(adapter); 
    datasource.close(); 
} 
+0

Rozwiązany, tutaj właściwy kod: – lucignolo