【问题标题】:Display images with multiple columns and rows (nxn) has memory issue in Android显示具有多列和多行的图像 (nxn) 在 Android 中存在内存问题
【发布时间】:2013-08-23 07:27:55
【问题描述】:

我在滚动视图中显示属性列表具有 nxn 矩阵视图。这有负载问题(内存不足并需要更多时间来加载)。为了解决这个问题,我尝试了几个解决方案,但无法达到 100%。

  1. 我将列滚动视图更改为列表视图并尝试过,但结果显示所有列表视图中的最后一列值。我知道问题是适配器数据集更改会影响所有视图如何克服这个问题?
  2. 最有价值的解决方案是在滚动视图中加载图像,这些图像在屏幕中可见,并且在可见变化(滚动)时我们可以加载图像。如何做到这一点?

我也尝试使用后台进程 (doinbackground) 来加载图像。

【问题讨论】:

标签: android android-listview scrollview universal-image-loader


【解决方案1】:

为gridview或行和列中的图像下载官方android示例 http://developer.android.com/training/displaying-bitmaps/index.html

【讨论】:

    【解决方案2】:

    试试这个代码:

    public class CustomBaseAdapter extends BaseAdapter {
        Context context;
        List<RowItem> rowItems;
    
    public CustomBaseAdapter(Context context, List<RowItem> items) {
        this.context = context;
        this.rowItems = items;
    }
    
    /*private view holder class*/
    private class ViewHolder {
        ImageView imageView;
        TextView txtTitle;
        TextView txtDesc;
    }
    
    public View getView(int position, View convertView, ViewGroup parent) {
        ViewHolder holder = null;
    
        LayoutInflater mInflater = (LayoutInflater)
            context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.list_item, null);
            holder = new ViewHolder();
            holder.txtDesc = (TextView) convertView.findViewById(R.id.desc);
            holder.txtTitle = (TextView) convertView.findViewById(R.id.title);
            holder.imageView = (ImageView) convertView.findViewById(R.id.icon);
            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }
    
        RowItem rowItem = (RowItem) getItem(position);
    
        holder.txtDesc.setText(rowItem.getDesc());
        holder.txtTitle.setText(rowItem.getTitle());
        holder.imageView.setImageResource(rowItem.getImageId());
    
        return convertView;
    }
    
    @Override
    public int getCount() {
        return rowItems.size();
    }
    
    @Override
    public Object getItem(int position) {
        return rowItems.get(position);
    }
    
    @Override
    public long getItemId(int position) {
        return rowItems.indexOf(getItem(position));
    }
    

    }

    行项目类是:

    public class RowItem {
        private int imageId;
        private String title;
        private String desc;
    
    
    public RowItem(int imageId, String title, String desc) {
        this.imageId = imageId;
        this.title = title;
        this.desc = desc;
    }
    public int getImageId() {
        return imageId;
    }
    public void setImageId(int imageId) {
        this.imageId = imageId;
    }
    public String getDesc() {
        return desc;
    }
    public void setDesc(String desc) {
        this.desc = desc;
    }
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
    @Override
    public String toString() {
        return title + "\n" + desc;
    }
    

    }

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-10-14
      • 2018-02-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-21
      • 2012-03-04
      相关资源
      最近更新 更多