我想要做的是使用SimpleCursorAdapter在我的drawable-dbimages
文件夹中显示图像。
我真的不知道如何去做这件事。我知道如何使用BitmapFactory.decodeResource
在数据库中按名称获取图像,但我不知道如何将其应用于适配器。
例如,假设我有一个名为cars
的表。在该表中,我有一个名为image
的列。每行image
的值是drawable-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
是文本视图,R.id.listitem_car_image
是图像视图。
我知道如何从数据库中获取image
的值并将其吐出到textview中,但是我想让它从drawables文件夹中获取图像,其名称在数据库列中,显示在每个listview项目的imageview中。
我不知道该怎么做。
答案 0 :(得分: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
,因此您可能希望也可能不想为此执行错误处理。此外,如果你想使用其他方法加载你的图像,那就是这样做的。