2012-03-04 2 views
6

Ho un adattatore del cursore personalizzato e vorrei mettere un'immagine in un ImageView in un ListView.Ottieni l'immagine risorsa per nome nell'adattatore personalizzato del cursore

Il mio codice è:

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

Questo è tutto OK, ma vorrei ottenere il nome dell'immagine dal database (il cursore). Ho provato con

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

Ma l'errore di ritorno: "I getResources() viene definito per il tipo CustomImageListAdapter"

+0

Se si desidera ottenere da Cursore perché non si chiama invece 'cursor.getString'. E dove è memorizzata la tua immagine? –

risposta

13

Si può fare solo una chiamata getResources() su un oggetto Context. Poiché il costruttore di CursorAdapter prende tale riferimento, è sufficiente creare un membro della classe che ne tenga traccia in modo da poterlo utilizzare in (presumibilmente) bindView(...). Probabilmente ne avrai bisogno anche per lo 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 mi hai battuto su di esso. :) – Squonk

+0

Grazie a "MH." per la soluzione. (anche a "MisterSquonk") – Cuarcuiu

+0

Perché è possibile utilizzare getResources() senza aggiungere il contesto all'interno di un'attività? Grazie. – Ricardo