2012-12-30 49 views
0

我想要做的是從我的drawable-dbimages文件夾有一個圖像顯示在一個ImageView使用SimpleCursorAdapter。從可繪製文件夾的圖像顯示在listview使用simplecursoradapater

我真的不知道如何去做這件事。我知道如何使用BitmapFactory.decodeResource在數據庫中獲取圖像的名稱,但我不知道如何將其應用於適配器。

例如,假設我有一個名爲cars的表。在那張表中,我有一個名爲image的專欄。每行的值爲imagedrawable-dbimages文件夾中圖像的名稱。

現在我有這樣的代碼:

cursor = datasource.fetchAllCars(); 
to = new int[] { R.id.listitem_car_name, R.id.listitem_car_image }; 
dataAdapter = new SimpleCursorAdapter(this, R.layout.listitem_car, cursor, columns, to, 0); 
setListAdapter(dataAdapter); 

R.id.listitem_car_name是一個TextView,並R.id.listitem_car_image是ImageView的。

我知道如何從數據庫中獲取image的值並將其吐出到textview中,但我希望這樣可以從名稱在數據庫列中的drawables文件夾中的圖像顯示在每個listview項目的imageview。

我不知道如何做到這一點。

回答

1

android的預製SimpleCursorAdapter是僅支持TextViews並將遊標列映射到它們。對於你所描述的,你需要製作自己的適配器對象,在這裏我使用了一個CursorAdapter,這需要在幕後工作中讓你的手變髒。這裏是我的樣品中的主要實例:

cursor = datasource.fetchAllCars(); 
    dataAdapter = new CustomCursorAdapter(this, cursor, 0); 
    setListAdapter(dataAdapter); 

然後完全成熟的對象這裏

import android.content.Context; 
import android.database.Cursor; 
import android.support.v4.widget.CursorAdapter; 
import android.view.LayoutInflater; 
import android.view.View; 
import android.view.ViewGroup; 
import android.widget.ImageView; 
import android.widget.TextView; 

public class CustomCursorAdapter extends CursorAdapter { 

    private LayoutInflater inflater; 

    public CustomCursorAdapter(Context context, Cursor c, int flags) { 
     super(context, c, flags); 
     inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE); 
    } 

    @Override 
    public View newView(Context context, Cursor c, ViewGroup parent) { 
     // do the layout inflation here 
     View v = inflater.inflate(R.layout.listitem_car, parent, false); 
     return v; 
    } 

    @Override 
    public void bindView(View v, Context context, Cursor c) { 
     // do everything else here 
     TextView txt = (TextView) v.findViewById(R.id.listitem_car_name); 
     ImageView img = (ImageView) v.findViewById(R.id.listitem_car_image); 

     String text = c.getString(c.getColumnIndex("COLUMN_TEXT")); 
     txt.setText(text); 

     // where the magic happens 
     String imgName = c.getString(c.getColumnIndex("COLUMN_IMAGE")); 
     int image = context.getResources().getIdentifier(imgName, "drawable", context.getPackageName()); 
     img.setImageResource(image); 
    } 

} 

我希望它主要是不言自明的,但在那裏我標示爲「神奇在哪裏發生」的部分應該是最重要的部分與你的問題有關。基本上,你從數據庫中獲得圖像名稱,下一行嘗試按照名稱(而不是通常的id)查找圖像,然後像往常一樣簡單地設置圖像。該方法爲其無法找到的圖像返回int 0,因此您可能會也可能不想爲此執行錯誤處理。此外,如果您想使用其他方式加載圖片,那就是做這件事的地方。

相關問題