2012-03-04 13 views
6

Tengo un adaptador de cursor personalizado y me gustaría poner una imagen en un ImageView en un ListView.Obtener imagen de recurso por nombre en el adaptador de cursor personalizado

Mi código es:

public class CustomImageListAdapter extends CursorAdapter { 

    private LayoutInflater inflater; 

    public CustomImageListAdapter(Context context, Cursor cursor) { 
    super(context, cursor); 
    inflater = LayoutInflater.from(context); 
    } 

    @Override 
    public void bindView(View view, Context context, Cursor cursor) { 
    // get the ImageView Resource 
    ImageView fieldImage = (ImageView) view.findViewById(R.id.fieldImage); 
    // set the image for the ImageView 
    flagImage.setImageResource(R.drawable.imageName); 
    } 

    @Override 
    public View newView(Context context, Cursor cursor, ViewGroup parent) { 
    return inflater.inflate(R.layout.row_images, parent, false); 
    } 
} 

Esto es todo bien, pero me gustaría obtener el nombre de la imagen a partir de la base de datos (cursor). he intentado con

String mDrawableName = "myImageName"; 
int resID = getResources().getIdentifier(mDrawableName , "drawable", getPackageName()); 

Pero devolución de error: "Los getResources() método está definido para el tipo CustomImageListAdapter"

+0

Si desea obtener de Cursor por qué no llama a 'cursor.getString' en su lugar. ¿Y dónde se almacena tu imagen? –

Respuesta

13

Sólo se puede hacer una llamada getResources() en un objeto de contexto. Dado que el constructor de CursorAdapter toma tal referencia, simplemente cree un miembro de clase que realice un seguimiento de él para que pueda usarlo en (presumiblemente) bindView(...). Probablemente también lo necesite para getPackageName().

private Context mContext; 

public CustomImageListAdapter(Context context, Cursor cursor) { 
    super(context, cursor); 
    inflater = LayoutInflater.from(context); 
    mContext = context; 
} 

// Other code ... 

// Now call getResources() on the Context reference (and getPackageName()) 
String mDrawableName = "myImageName"; 
int resID = mContext.getResources().getIdentifier(mDrawableName , "drawable", mContext.getPackageName()); 
+0

+1 me ganaste. :) – Squonk

+0

Gracias a "MH". para la solución. (también para "MisterSquonk") – Cuarcuiu

+0

¿Por qué puede usar getResources() sin anexar el contexto dentro de una actividad? Gracias. – Ricardo

Cuestiones relacionadas