2011-04-22 7 views
1

J'ai une vue de liste qui est remplie à partir d'une base de données SQLite en utilisant le SimpleCursorAdapter. Une des colonnes renvoyées dans le curseur est une valeur entière 0 ou 1. Dans ma vue de liste, je souhaite afficher ceci sous une forme plus conviviale (par exemple "Oui" ou "Non") et éventuellement avec des couleurs de texte différentes pour chaque. Voici ma source:Application Android, texte conditionnel dans ListView

Cursor c = dbHelper.fetchAllItems(); 
startManagingCursor(c); 

String[] from = {"deployed", "designation", "serial"}; 
int[] to = {R.id.deployed, R.id.designation, R.id.serial}; 

setListAdapter(new SimpleCursorAdapter(this, R.layout.list_item, c, from, to)); 

Comment puis-je passer sous condition éléments et/ou des propriétés dans la mise en page lorsque la SimpleCursorAdapter cartes simplement chaque vue d'un nom de colonne. (Est-il sûr de supposer que je ne peux pas utiliser SimpleCursorAdapter pour y parvenir?)

+1

ne devrait probablement pas utiliser un simple adaptateur de curseur. en utilisant un simple echange de curseurs comme celui-ci n'est pas fait pour beaucoup de personnalisation, comme vous avez besoin – binnyb

Répondre

3

Résolu en ajoutant un adaptateur personnalisé, l'extension CursorAdapter

Modification:

Cursor c = dbHelper.fetchAllItems(); 
startManagingCursor(c); 

setListAdapter(new RowAdapter(this, c)); 

Nouvelle classe imbriquée:

private static class RowAdapter extends CursorAdapter { 

    public RowAdapter(Context context, Cursor c) { 
     super(context, c); 
    } 

    public void bindView(View view, Context context, Cursor c) { 
     TextView vDesignation = (TextView) view.findViewById(R.id.designation); 
     TextView vSerial = (TextView) view.findViewById(R.id.serial); 
     TextView vDeployed = (TextView) view.findViewById(R.id.deployed); 

     String designation = c.getString(c.getColumnIndexOrThrow("designation")); 
     String serial = c.getString(c.getColumnIndexOrThrow("serial")); 
     int deployed = c.getInt(c.getColumnIndexOrThrow("deployed")); 

     vDesignation.setText(designation); 
     vSerial.setText(serial); 
     vDeployed.setText(deployed > 0 ? R.string.yes : R.string.no); 
     vDeployed.setTextColor(deployed > 0 ? view.getResources().getColor(R.color.yes) : view.getResources().getColor(R.color.no)); 
    } 

    public View newView(Context context, Cursor c, ViewGroup parent) { 
     LayoutInflater inflater = LayoutInflater.from(context); 
     View view = inflater.inflate(R.layout.list_item, parent, false); 
     bindView(view, context, c); 
     return view; 
    } 
}