【问题标题】:how to set image to image view by image name that stored in database in android?如何通过存储在android数据库中的图像名称将图像设置为图像视图?
【发布时间】:2015-03-03 19:14:45
【问题描述】:

我有一个类,它在数据库中获取两个字段(名称和图像)并将名称设置为文本视图并将图像设置为图像视图 现在我有图像问题,如何通过存储在数据库中的图像名称将图像设置为图像视图? 请帮帮我!

我的源代码:


public class ListMovie extends BaseAdapter {

    private Resources res = null;
    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private LayoutInflater inflate;
    ViewHolder holder;

    public ListMovie(Activity a, ArrayList<HashMap<String, String>> d) {
        // TODO Auto-generated constructor stub

        activity = a;
        data = d;
        inflate = (LayoutInflater) activity
            .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    }
    @Override
    public int getCount() {
        // TODO Auto-generated method stub
        return data.size();
    }

    @Override
    public Object getItem(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public long getItemId(int position) {
        // TODO Auto-generated method stub
        return position;
    }

    @Override
    public View getView(int arg0, View view, ViewGroup arg2) {
        // TODO Auto-generated method stub

        View v1 = view;

        if (v1 == null) {

            v1 = inflate.inflate(R.layout.item, null);
            holder = new ViewHolder();

            holder.txt_name = (TextView) v1.findViewById(R.id.item_name);

            holder.img = (ImageView) v1.findViewById(R.id.item_img);


            v1.setTag(holder);

        } else {

            holder = (ViewHolder) v1.getTag();

        }
        HashMap<String, String> song = new HashMap<String, String>();
        song = data.get(arg0);


        holder.txt_name.setText(song.get("name"));

        return v1;

    }
    static class ViewHolder {
        TextView txt_name;
        ImageView img;  
    }
}

【问题讨论】:

  • “图像名称”是指存储图像文件的路径?
  • 不只是存储图像名称并将图像放入drawable

标签: android image android-imageview


【解决方案1】:

如果您的图像在 /res 文件夹中,您可以在 getView 中使用它:

int resourceId = res.getIdentifier(name, "drawable", 
   context.getPackageName());//initialize res and context in adapter's contructor
img.setImageResource(resourceId);

完整代码:

class ListMovie extends BaseAdapter {

    private Resources res = null;
    private Activity activity;
    private ArrayList<HashMap<String, String>> data;
    private LayoutInflater inflate;
    ViewHolder holder;

    public ListMovie(Activity a, ArrayList<HashMap<String, String>> d) {
        activity = a;
        data = d;
        inflate = (LayoutInflater) activity
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        res = a.getResources();
    }
    @Override
    public int getCount() {
        return data.size();
    }

    @Override
    public HashMap<String, String> getItem(int position) {
        return data.get(position);
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        View view = convertView;

        if (view == null) {
            view = inflate.inflate(R.layout.item, null);
            holder = new ViewHolder();
            holder.txt_name = (TextView) view.findViewById(R.id.item_name);
            holder.img = (ImageView) view.findViewById(R.id.item_img);
            view.setTag(holder);

        } else {
            holder = (ViewHolder) view.getTag();
        }
        HashMap<String, String> song = new HashMap<String, String>();
        song = data.get(position);
        holder.txt_name.setText(song.get("name"));
        int resourceId = res.getIdentifier(image_name, "drawable",
                activity.getPackageName());//initialize res and context in adapter's contructor
        img.setImageResource(resourceId);
        return view;

    }
    static class ViewHolder {
        TextView txt_name;
        ImageView img;
    }
}

image_name 更改为您的图片名称

【讨论】:

  • context.getPackageName() 发生错误我该怎么办?
  • 您必须创建上下文参数,然后在构造函数中初始化。或者通过 activity.getPackageName() 改变 context.getPackageName()
  • 我没注意,可以多解释一下吗?
  • 我改成这样: int resourceId = res.getIdentifier("turkie", "drawable",MainActivity.PACKAGE_NAME); holder.img.setImageResource(resourceId);并在 mainActivity public static String PACKAGE_NAME; PACKAGE_NAME = getApplicationContext().getPackageName();但仍然无法正常工作
  • 我通常不会在适配器中使用活动实例。相反,我使用上下文,因为不需要使用活动。并且无需创建 PACKAGE_NAME。让我们使用activity.getPackageName()。你遇到了什么错误?
【解决方案2】:

您可以使用Android Universal Image Loader 库或ion 来动态加载图像。

编辑:

试试这个link。它有一个关于如何通过代码加载图像的很好的例子。

【讨论】:

  • 不,我只是想通过存储在数据库中的名称在可绘制的图像视图中显示图像
猜你喜欢
  • 2014-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-22
  • 2011-01-13
  • 2011-04-10
  • 1970-01-01
相关资源
最近更新 更多