0

我想要做的是drawable-dbimages使用 SimpleCursorAdapter 将我文件夹中的图像显示在 ImageView 中。

我真的不知道该怎么做。我知道如何使用它在数据库中按名称获取图像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 项的图像视图中.

我不知道该怎么做。

4

1 回答 1

1

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它找不到的图像,因此您可能希望也可能不希望为此执行错误处理。此外,如果您想使用其他加载图像的方法,那就是这样做的地方。

于 2012-12-30T06:52:46.333 回答