2010-02-03 20 views
10

Soy bastante nuevo en el desarrollo de Android (comenzó hace 2 días) y ya he pasado por varios tutoriales. Estoy compilando una aplicación de prueba del ejercicio NotePad (Link to tutorial) en el SDK de Android y como parte de la lista de notas quiero mostrar una imagen diferente según el contenido de un campo de base de datos que he llamado "notetype". Me gustaría que esta imagen aparezca en la vista Lista antes de cada entrada en el bloc de notas.Android: cambiar un src de ImageView según los datos del campo de la base de datos

El código en mi archivo .java es:

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

Y mi archivo de diseño xml (notes_row.xml) tiene el siguiente aspecto:

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

yo realmente no tengo idea de cómo me' ir a buscar el dibujable derecho dependiendo del tipo de nota que se haya seleccionado. Por el momento, tengo la capacidad de seleccionar el tipo de un Spinner, por lo que lo que se almacena en la base de datos es un número entero. He creado algunas imágenes que corresponden a estos enteros, pero no parece recoger cosas.

Cualquier ayuda sería apreciada. Si necesita más información, por favor hágamelo saber.

Respuesta

24

Es posible que desee probar el uso de ViewBinder. http://d.android.com/reference/android/widget/SimpleCursorAdapter.ViewBinder.html

Este ejemplo debería ayudar:

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

}

después añadirlo a su adaptador con

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

Excelente - funciona perfecto. No podría haber pedido una solución más fácil :). ¡Tienes mis más sinceras gracias! – Butteredchops

+0

¡excelente respuesta! ¡gracias! –

+0

Me gustaría agregar que no es necesario que cubra todos los casos en 'setViewValue', solo para ImageView. Para todas las demás vistas, simplemente debe devolver 'false' y, en este caso, Android aplicará el enlace normal que suministró a SimpleCursorAdapter. – damluar

Cuestiones relacionadas