android 的预制件SimpleCursorAdapter
仅支持TextViews
并将光标列映射到它们。对于您所描述的内容,您需要制作自己的适配器对象,在这里我使用了 a 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
它找不到的图像,因此您可能希望也可能不希望为此执行错误处理。此外,如果您想使用其他加载图像的方法,那就是这样做的地方。