2011-05-06 1 views
0

J'ai un ListView avec quelques éléments et je veux changer l'arrière-plan de la ligne en fonction de leur type dans la base de données. Ce que j'ai obtenu est une instance SimpleCursorAdapter et c'est la fonction adapter.setViewBinder(...). Mais il semble que je ne peux pas accéder au LinearLayout d'une rangée. Voici le code:Puis-je modifier l'arrière-plan d'un LinearLayout à partir d'une ligne ListView dans ViewBinder?

final SimpleCursorAdapter adapter = new SimpleCursorAdapter(this, 
      R.layout.day, c, new String[] { "name_con", "start", "end", 
        "type", "prof", "room" }, new int[] { R.id.subjectName, 
        R.id.subjectStart, R.id.subjectEnd, R.id.subjectType, 
        R.id.subjectProf, R.id.subjectRoom }); 

    adapter.setViewBinder(new ViewBinder() { 
     @Override 
     public boolean setViewValue(View view, Cursor cursor, int column) { 
      switch (view.getId()) { 
      case R.id.subjectName: 
       final String colNameName = cursor.getString(1); 
       ((TextView) view).setText(colNameName); 

       return true; 
      case R.id.subjectStart: 
       final int colNameStart = cursor.getInt(2); 

       Date dStart = new Date(colNameStart * 1000); 
       SimpleDateFormat sdfStart = new SimpleDateFormat(
         "HH:mm", Locale.getDefault()); 
       String startString = sdfStart.format(dStart); 

       ((TextView) view).setText(startString); 

       return true; 
      case R.id.subjectEnd: 
       final int colNameEnd = cursor.getInt(3); 

       Date dEnd = new Date(colNameEnd * 1000); 
       SimpleDateFormat sdfEnd = new SimpleDateFormat(
         "HH:mm", Locale.getDefault()); 
       String EndString = sdfEnd.format(dEnd); 

       ((TextView) view).setText(EndString); 

       return true; 
      case R.id.subjectType: 
       final int colNameType = cursor.getInt(4); 

       switch(colNameType){ 
       case 0: 
        ((TextView) view).setText(R.string.practice); 
        break; 
       case 1: 
        ((TextView) view).setText(R.string.course); 
        break; 
       case 2: 
        ((TextView) view).setText(R.string.practica); 
        break; 
       case 3: 
        ((TextView) view).setText(R.string.seminar); 
       } 

       return true; 
      case R.id.subjectProf: 
       final String colNameProf = cursor.getString(5); 
       ((TextView) view).setText(colNameProf); 

       return true; 
      case R.id.subjectRoom: 
       final String colNameRoom = cursor.getString(6); 
       ((TextView) view).setText(colNameRoom); 

       return true; 
      case R.id.dayCell: 
       ((LinearLayout)view).setBackgroundColor(Color.WHITE); 
      default: 
       return false; 
      } 
     } 
    }); 

    this.setListAdapter(adapter); 

Répondre

0

Vous devriez être en mesure de faire quelque chose comme:

switch (view.getId()) { 
      case R.id.subjectName: 
       final String colNameName = cursor.getString(1); 
       ((TextView) view).setText(colNameName); 
       ((LinearLayout)view.getParent()).setBackgroundResource(<resource id>); 
       return true; 

EDIT: pour l'efficacité, vous aurez probablement besoin que de le faire dans l'un des ViewBinder passe et vous devez être sûr que c'est un LinearLayout créé dans R.layout.day ou vous obtiendrez une exception ClassCast.

+0

fonctionne parfaitement! Je vous remercie. –

+0

Bon d'entendre ça a fonctionné. – Femi

0

Vous pouvez appeler la setBackgroundColor (couleur int), setBackgroundResource (int) ou setBackgroundResource (int résid) pour changer l'arrière-plan de votre point de vue.

BR, Christoffer

0

Remplacer bindView dans votre CursorAdapter

@Override 
public void bindView(View view, Context context, Cursor cursor) { 
    super.bindView(view, context, cursor); 
    view.setBackgroundColor(color); 
} 
Questions connexes