从resource/drawable动态显示图像

use*_*302 3 android listview uri dynamic drawable

我试图将不同的图像(.jpg,.png)动态地放入ListView from r中es/drawable.我从数据库中获取的图像中的名称.图像本身位于res/drawable文件夹中.

这是我已经拥有的,错误:D

String imgName; - >我需要从数据库中获取img名称

Drawable drawable;    
    drawable = Class.appContext.getResources().getDrawable(Class.appContext.getResources().getIdentifier("com.example.test:drawable/"+imgName,null,null));  
Run Code Online (Sandbox Code Playgroud)

然后我把它变成ArrayList数据库中的每个图像(+ - 200个图像):

ArrayList<HashMap<String, Object>> list = new ArrayList<HashMap<String, Object>>();
HashMap<String, Object> map = new HashMap<String, Object>();

map = new HashMap<String, Object>();
map.put("img",drawable);

          map.put("text", "some text");
          list.add(map);
Run Code Online (Sandbox Code Playgroud)

现在我返回列表;

在我打电话的班级:

listReceive = Class.getImages(appContext); 

listSetup = new SimpleAdapter(this, listReceive, R.layout.row,
                        new String[] {"img", "text"}, new int[] {R.id.IMG_CELL, R.id.TEXT_CELL});
                lvList.setAdapter(listSetup);
Run Code Online (Sandbox Code Playgroud)

XML行是一个ImageView和一个TextView.

System.out:resolveUri在坏位图uri上失败:android.drawable.bitmapDrawable@405739 resolveUri在坏位图uri上失败:android.drawable.bitmapDrawable@405639 resolveUri在坏位图uri上失败:android.drawable.bitmapDrawable@405959 resolveUri在失败时失败位图uri:android.drawable.bitmapDrawable@405677 ...... ......

当我将图像保存到本地或SDcard内存中时,我将其工作,然后将路径放在arraylist中,如:

map.put("img","/data/data/com.example.test/images/" + imgName);
Run Code Online (Sandbox Code Playgroud)

我不能使用它,因为那时我需要将图片复制res/drawable到本地或SD.This占用内存的2倍.不能有那个.

必须有一种从drawable动态获取图像的方法.

谁知道我在这里缺少什么?谢谢.

Ber*_*t F 5

SimpleAdapter需要一个指定资源或图像URI的整数或字符串:

public void setViewImage (ImageView v, String value)
Since: API Level 1
Run Code Online (Sandbox Code Playgroud)

由bindView()调用以设置ImageView的图像,但仅当没有现有的ViewBinder或现有的ViewBinder无法处理与ImageView的绑定时.默认情况下,该值将被视为图像资源.如果该值不能用作图像资源,则该值用作图像Uri.如果提供的数据不是int或Integer,则调用此方法而不是setViewImage(ImageView,int).

我认为应该用setViewBinder提供ViewBinderSimpleAdapter处理绑定Drawable数据到ImageView.基本上,除非为图像视图调用,否则setViewValue()方法应该返回false.当为图像视图调用它时,该方法应在视图中设置数据并返回true.返回值指示ViewBinder是否能够设置视图或适配器是否应尝试通过其默认行为绑定数据本身.

也许是这样的:

private final SimpleAdapter.ViewBinder mViewBinder =
    new SimpleAdapter.ViewBinder() {
        @Override
        public boolean setViewValue(
                final View view,
                final Object data,
                final String textRepresentation) {

            if (view instanceof ImageView) {
                ((ImageView) view).setImageDrawable((Drawable) data);
                return true;
            }

            return false;
        }
    };

...

listSetup .setViewBinder(mViewBinder);
Run Code Online (Sandbox Code Playgroud)

我用SimpleCursorAdapter和它的ViewBinder 做了类似的事情.