2010-02-03 15 views
10

Sono abbastanza nuovo per lo sviluppo di Android (iniziato 2 giorni fa) e ho già effettuato una serie di esercitazioni. Sto creando un'app di prova dall'esercizio NotePad (Link to tutorial) nell'SDK di Android e, come parte dell'elenco di note, voglio visualizzare un'immagine diversa a seconda del contenuto di un campo di database che ho chiamato "notetype". Mi piacerebbe che questa immagine appaia nella visualizzazione Elenco prima di ogni voce del blocco note.Android: modifica di uno src ImageView in base ai dati di campo del database

Il codice nel mio file .java è:

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); 
} 

E il mio file di layout xml (notes_row.xml) si presenta così:

<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"/> 

ho davvero ho idea di come I' andare a prendere il giusto drawable a seconda del tipo di nota che è stata selezionata. Al momento ho la possibilità di selezionare il tipo da uno Spinner, quindi ciò che viene memorizzato nel database è un numero intero. Ho creato alcune immagini che corrispondono a questi numeri interi, ma non sembra prendere decisioni.

Qualsiasi aiuto sarebbe apprezzato. Se avete bisogno di maggiori informazioni, per favore fatemelo sapere.

risposta

24

Si potrebbe provare a utilizzare un ViewBinder. http://d.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html

Questo esempio dovrebbe aiutare:

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; 
     } 
    } 

}

quindi aggiungerlo al vostro adattatore con

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

Eccellente - funziona perfettamente. Non avrei potuto chiedere una soluzione più facile :). Hai i miei sinceri ringraziamenti! – Butteredchops

+0

ottima risposta! grazie! –

+0

Vorrei aggiungere che non è necessario coprire tutti i casi in 'setViewValue', solo per ImageView. Per tutte le altre viste dovresti semplicemente restituire 'false' e ​​in questo caso Android applicherà il binding normale che hai fornito a SimpleCursorAdapter. – damluar

Problemi correlati