2010-02-03 8 views
10

Je suis assez nouveau pour le développement Android (commencé il y a 2 jours) et j'ai déjà suivi un certain nombre de tutoriels. Je construis une application de test à partir de l'exercice NotePad() dans le SDK Android et dans le cadre de la liste des notes que je veux afficher une image différente en fonction du contenu d'un champ de base de données que j'ai appelé notetype. J'aimerais que cette image apparaisse dans la vue Liste avant chaque entrée de bloc-notes.Android: Modification d'un src ImageView en fonction des données de terrain de la base de données

Le code dans mon fichier .java est:

private void fillData() { 
    Cursor notesCursor = mDbHelper.fetchAllNotes(); 

    notesCursor = mDbHelper.fetchAllNotes(); 
    startManagingCursor(notesCursor); 

    String[] from = new String[]{NotesDbAdapter.KEY_NOTENAME, NotesDbAdapter.KEY_NOTETYPE}; 

    int[] to = new int[]{R.id.note_name, R.id.note_type}; 

    // Now create a simple cursor adapter and set it to display 
    SimpleCursorAdapter notes = 
      new SimpleCursorAdapter(this, R.layout.notes_row, notesCursor, from, to); 
    setListAdapter(notes); 
} 

Et ma mise en page fichier xml (notes_row.xml) ressemble à ceci:

<ImageView android:id="@+id/note_type" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:src="@drawable/default_note"/> 
<TextView android:id="@+id/note_name" 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content"/> 

je vraiment aucune idée de comment je d aller chercher le bon dessin en fonction du type de note sélectionné. Au moment où j'ai la possibilité de sélectionner le type à partir d'un Spinner, ce qui est stocké dans la base de données est un entier. J'ai créé des images qui correspondent à ces nombres entiers mais cela ne semble pas ramasser les choses.

Toute aide serait appréciée. Si vous avez besoin de plus d'informations, s'il vous plaît faites le moi savoir.

Répondre

24

Vous pouvez essayer d'utiliser un ViewBinder. http://d.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html

Cet exemple devrait aider:

private class MyViewBinder implements SimpleCursorAdapter.ViewBinder { 

    public boolean setViewValue(View view, Cursor cursor, int columnIndex) { 
     int viewId = view.getId(); 
     switch(viewId) { 
      case R.id.note_name: 

       TextView noteName = (TextView) view; 
       noteName.setText(Cursor.getString(columnIndex)); 

      break; 
      case R.id.note_type: 

       ImageView noteTypeIcon = (ImageView) view; 

       int noteType = cursor.getInteger(columnIndex); 
       switch(noteType) { 
        case 1: 
         noteTypeIcon.setImageResource(R.drawable.yourimage); 
        break; 
        case 2: 
         noteTypeIcon.setImageResource(R.drawable.yourimage); 
        break; 
        etc… 
       } 

      break; 
     } 
    } 

}

Ensuite, ajoutez à votre adaptateur avec

note.setViewBinder(new MyViewBinder()); 
+0

excellent - fonctionne parfaitement. N'aurait pas pu demander une solution plus simple :). Vous avez mes sincères remerciements! – Butteredchops

+0

bonne réponse! Je vous remercie! –

+0

Je voudrais ajouter que vous n'avez pas à couvrir tous les cas dans 'setViewValue', juste pour ImageView. Pour toutes les autres vues, vous devriez simplement retourner 'false' et dans ce cas Android appliquera la liaison normale que vous avez fournie à SimpleCursorAdapter. – damluar

Questions connexes