如何将资产文件夹中的图像设置为列表视图?(使用SimpleAdapter)

时间:2018-08-22 12:46:18

标签: java android listview assets simpleadapter

我在名为 images1 的资产中有一个文件夹,其中有114张图像。我需要在listView中使用2个textViews和1个imageView进行设置。我在textViews上没有问题,但是我不知道如何将资产中的图像设置为listView。 我尝试过:

int ids[] = new int[114];

for (int i = 0; i <ids.length; i++) {//<-------- taking ids of all pictures from images1 in assets-folder
        try {
            String[] images =getAssets().list("images1");
            ArrayList<String> listImages = new ArrayList<String>(Arrays.asList(images));
            int imgId = getResourceId(this, listImages.get(i),"images1", getPackageName());
            ids[i] = imgId;
        }
        catch(IOException ex) {}
    }

ArrayList<Map<String, Object>> data = new ArrayList<Map<String, Object>>(
            questionTexts.length);//<--------filling listView's textViews and imageView
    Map<String, Object> m;
    for (int i = 0; i < questionTexts.length; i++) {
        m = new HashMap<String, Object>();
        m.put(ATTRIBUTE_QUESTION_TEXT, questionTexts[i]);//<-------- textView
        m.put(ATTRIBUTE_ANSWER_TEXT, answerTexts[i]);//<-------- textView
        m.put(ATTRIBUTE_NAME_IMAGE, ids[i]);//<-------- imageView
        data.add(m);
        String[] from = { ATTRIBUTE_QUESTION_TEXT, ATTRIBUTE_ANSWER_TEXT,
                ATTRIBUTE_NAME_IMAGE };
        int[] to = { R.id.listView_item_title, R.id.listView_item_short_description, R.id.listView_image };
        SimpleAdapter sAdapter = new SimpleAdapter(this, data, R.layout.item,
                from, to);
        lvSimple = (ListView) findViewById(R.id.lvSimple);
        lvSimple.setAdapter(sAdapter);
    }

public static int getResourceId(Context context,String variableName, String resourceName,
                                String packageName) throws RuntimeException{//<----- this method helps me to get IDs of images from assets/images1
    try{
        return context.getResources().getIdentifier(variableName,resourceName,packageName);
    }catch (Exception e){
        throw new RuntimeException("Error getting resource id");
    }
}

但是最后我有了白色的田野,而不是我的照片。 我知道当图片位于R.drawable中时如何解决此问题,但是当图片位于Assets子文件夹中时如何解决?

4 个答案:

答案 0 :(得分:1)

您可以使用它。

try 
{
    // get input stream
    InputStream ims = getAssets().open("avatar.jpg");
    // load image as Drawable
    Drawable d = Drawable.createFromStream(ims, null);
    // set image to ImageView
    mImage.setImageDrawable(d);
  ims .close();
}
catch(IOException ex) 
{
    return;
}

答案 1 :(得分:0)

您可以使用以下代码获取位图

private Bitmap getBitmapFromAssets(String fileName){

    AssetManager am = getAssets();
    InputStream is = null;
    try{
        is = am.open(fileName);
    }catch(IOException e){
        e.printStackTrace();
    }
    Bitmap bitmap = BitmapFactory.decodeStream(is);
    return bitmap;
}

您可以使用“滑行” 在imageview中显示位图,这是示例代码

Glide.with(context)
    .load(Uri.parse("file:///android_asset/fileName"))
    .into(imageView);

答案 2 :(得分:0)

您确定该图像应位于assets/文件夹中吗?为什么不在res/drawables/中呢?

您当然可以从资产中加载它;)

要获取资产文件夹中所有文件的列表,请使用以下代码:

list = getAssets().list("images1")

要从资产加载图像,可以使用以下代码:

fun setImageFromAsset(ImageView view, String filename) { 
    try {
        InputStream is = getAssets().open(filename);
        Drawable drawable = Drawable.createFromStream(is, null);
        view.setImageDrawable(drawable);
    }
    catch(IOException ex) {
        return;
    }
}

答案 3 :(得分:0)

简单适配器只能与可绘制文件夹中的ID或Uri一起使用。但是您可以使用ViewBinder通过setImageBitmap方法设置图像。