我在一个带图像名称的循环中显示了近4,000张图像。
以下是我用来从drawable文件夹中获取图片的代码
for(int i=0; i<count(images_array); i++) {
mDrawableName = images_array(i);
int resID = res.getIdentifier(mDrawableName, "drawable", activity.getPackageName());
Drawable drawable = res.getDrawable(resID);
image.setImageDrawable(drawable);
}
问题是:
答案 0 :(得分:1)
通过我在资源文件夹中找不到图像名称 异常和崩溃。
这不是问题,因为对于不存在的资源,getIdentifier返回0,然后getDrawable会为Resources.NotFoundException
抛出id = 0
,这是预期的行为。不是有效的身份证明。)
有什么方法可以检查图像是否是可绘制的mot然后显示 占位符图片?
您要么捕获该异常,要么检查getIdentifier
是否返回0
我不知道你的其余代码,所以根据你发布的内容,你可以这样做:
for (int i=0; i<count(images_array); i++) {
mDrawableName = images_array(i);
int resID = res.getIdentifier(mDrawableName, "drawable", activity.getPackageName());
Drawable drawable;
if (resID == 0) {
drawable = res.getDrawable(R.drawable.placeholderimage, null);
} else {
drawable = res.getDrawable(resID);
}
image.setImageDrawable(drawable);
}
注意:
现在,getDrawable(int id)已被弃用,从API 22开始
在示例代码中,我使用getDrawable(int id, Resources.Theme theme)代替
您可能想要查看其他alternatives。
有没有更好的方法从listview中的drawable加载4000张图片?
尝试使用Android的RecyclerView和/或第三方库,例如Glide。
答案 1 :(得分:0)
Boolean fileFound = true;
try{
int resID = res.getIdentifier(mDrawableName , "drawable", activity.getPackageName());
Drawable drawable = res.getDrawable(resID );
image.setImageDrawable(drawable );
}catch (Resources.NotFoundException e){
fileFound = false;
}
if(!fileFound){
int resID = res.getIdentifier("img_not_found" , "drawable", activity.getPackageName());
Drawable drawable = res.getDrawable(resID );
image.setImageDrawable(drawable );
}