Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/190.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 本地加载listview图标,寻找最有效的流程_Java_Android_Android Listview_Android Drawable_Smooth Scrolling - Fatal编程技术网

Java 本地加载listview图标,寻找最有效的流程

Java 本地加载listview图标,寻找最有效的流程,java,android,android-listview,android-drawable,smooth-scrolling,Java,Android,Android Listview,Android Drawable,Smooth Scrolling,我试图有效地将我的本地可绘制文件(从我的res>可绘制文件夹)加载到我的列表项中。我希望在加载图像时使用尽可能少的内存 我最初在模型中将我的资源名(R.drawable.list_图标)定义为int,并在适配器中调用setImageResource以应用该图标 但是,在查看API文档之后,它建议我使用setImageDrawable或setImageBitmap,因为它们不是在UI线程上运行的。我需要知道下面的代码是否是一个好方法,其中我将可绘制图像转换为位图并使用了setImageBitmap

我试图有效地将我的本地可绘制文件(从我的res>可绘制文件夹)加载到我的列表项中。我希望在加载图像时使用尽可能少的内存

我最初在模型中将我的资源名(R.drawable.list_图标)定义为
int
,并在适配器中调用
setImageResource
以应用该图标

但是,在查看API文档之后,它建议我使用
setImageDrawable
setImageBitmap
,因为它们不是在UI线程上运行的。我需要知道下面的代码是否是一个好方法,其中我将可绘制图像转换为位图并使用了
setImageBitmap
,并且在
AsyncTask
中加载本地图像是否值得合并(因为我也看到过使用这种方法)

模型 适配器
我这里的主要问题是加载本地绘图的最有效方式是什么,这些图像图标的质量非常高,不仅仅是简单的单色图标,它们是实际的产品图像。

尝试使用UniversalImageLoader。它不仅适用于从网络加载图像。

有许多库可以处理这种效率。你试过毕加索、Glide或UniversalImageLoader吗?我听说过,还没有试过。这就是为什么我发布这个问题来衡量其他人(关心效率和内存使用)是如何在listview中加载本地可绘制内容的。我认为大多数库都是为了从web上加载图像而设计的,而不是本地绘图。你知道有哪家对本地资源进行这种类型的优化吗?毕加索和格莱德也可以加载本地图像并处理效率!我用过毕加索,它非常简洁、快速!谢谢@Pavlos我会调查的谢谢,我会调查的
public class ProductItem {

  public int listIcon;
  public String listTitle;
  public String listDesc;

  public ProductItem(int listIcon, String listTitle,
                   String listDesc) {
    this.listIcon = listIcon;
    this.listTitle = listTitle;
    this.listDesc = listDesc;
 }

 public int getIconID() {
     return listIcon;
 }
}
public class ProductAdapter extends ArrayAdapter<ProductItem> {

 Context context;
 int layoutResourceID;
 ProductItem data[];
 ProductHolder viewHolder;

public ProductAdapter(Context context, int layoutResourceID, ProductItem[] data) {
    super(context, layoutResourceID, data);
    this.layoutResourceID = layoutResourceID;
    this.context = context;
    this.data = data;
}

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

    if (convertView == null) {

        LayoutInflater inflater = (LayoutInflater) context
                .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
        convertView = inflater.inflate(layoutResourceID, parent, false);

        viewHolder = new ProductHolder();
        viewHolder.productType = (TextView) convertView.findViewById(R.id.itemTitle);
        viewHolder.productDesc = (TextView) convertView.findViewById(R.id.itemSubtitle);
        viewHolder.productImage = (ImageView) convertView.findViewById(R.id.itemIcon);

        convertView.setTag(viewHolder);

    } else {
        viewHolder = (ProductHolder) convertView.getTag();
    }

    ProductItem objectItem = data[position];

    if (objectItem != null) {
        viewHolder.productType.setText(objectItem.listTitle);
        viewHolder.productType.setTag(objectItem.listTitle);
        viewHolder.productDesc.setText(objectItem.listDesc);
        viewHolder.productDesc.setTag(objectItem.listDesc);
        // Im currently using the following method for obtain the resource. 
        InputStream is = context.getResources().openRawResource(objectItem.getIconID());
        final Bitmap imageBitmap = BitmapFactory.decodeStream(is);
        viewHolder.productImage.setImageBitmap(imageBitmap);
        // Im using 'setImageBitmap' since it doesnt run on the UI thread, hoping that this will in return load quicker. 
        // However i was previously using the following.
        // viewHolder.productImage.setImageResource(objectItem.getIconID());

        viewHolder.productImage.setTag(objectItem.listIcon);
    }
    return convertView;
}
static class ProductHolder {
    public TextView productType;
    public TextView productDesc;
    public ImageView productImage;
}
}
listData[0] = new ProductItem(R.drawable.list_icon, getString(R.string.list_title), getString(R.string.list_description));