2012-03-04 58 views
6

我有一個自定義的光標適配器,我想將圖像放入ListView中的ImageView。通過名稱獲取資源圖像到自定義光標適配器

我的代碼是:

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

這是一切OK,但我想從數據庫(光標)獲取圖像的名稱。 我試着用

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

但返回錯誤:「該方法getResources()是未定義的類型CustomImageListAdapter」

+0

如果你想從光標獲得,爲什麼不改用'cursor.getString'。你的圖像存儲在哪裏? – 2012-03-04 00:20:25

回答

13

你只能做一個上下文對象上調用getResources()。由於CursorAdapter的構造函數需要這樣的引用,因此只需創建一個可以跟蹤它的類成員,以便可以在(可能)bindView(...)中使用它。您也可能需要它以獲得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你擊敗了我。 :) – Squonk 2012-03-04 00:20:56

+0

感謝「MH。」爲解決方案。 (也給「MisterSquonk」) – Cuarcuiu 2012-03-04 13:32:26

+0

爲什麼你可以使用getResources()而不在活動內附加上下文?謝謝。 – Ricardo 2015-01-13 15:02:22

相關問題