消息关闭
    暂无新消息!
代码如下

AsyncImageLoader :

import android.content.Context;
import android.graphics.Bitmap;
import android.os.AsyncTask;
import android.util.LruCache;
import android.widget.ImageView;

public class AsyncImageLoader extends AsyncTask<Integer, Void, Bitmap>  {

  private Context mContext;
  private ImageView image;  
  private LruCache<Integer, Bitmap> lruCache;  
  
    /** 
   
     */  
    public AsyncImageLoader(Context context , ImageView image, LruCache<Integer, Bitmap> lruCache) {  
        super();  
        this.mContext = context;
        this.image = image;  
        this.lruCache = lruCache;  
    }  
  
    @Override  
    protected Bitmap doInBackground(Integer... params) {  
        Bitmap bitmap = null;  
        bitmap = SimpleImageLoader.getBitmap(mContext,params[0],80f,80f);  //压缩图片
        addBitmapToMemoryCache(params[0], bitmap);  
        return bitmap;  
    }  
  
    @Override  
    protected void onPostExecute(Bitmap bitmap) {  
        image.setImageBitmap(bitmap);  
    }  
        //
    private void addBitmapToMemoryCache(Integer key, Bitmap bitmap) {  
        if (getBitmapFromMemoryCache(key) == null) {  
            lruCache.put(key, bitmap);  
        }  
    }  
        //
    public Bitmap getBitmapFromMemoryCache(Integer key) {  
        return lruCache.get(key);  
    }

}

ListviewAdapter:

import java.util.List;

import android.content.Context;
import android.graphics.Bitmap;
import android.util.LruCache;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class MyListViewAdapter extends BaseAdapter {

private List<ListViewItemContent> mData;
private LayoutInflater mInflater = null;
private Context mContext;

private final int maxMemory = (int) Runtime.getRuntime().maxMemory();//获取当前应用程序所分配的最大内存  
    private final int cacheSize = maxMemory / 3;//只分3分之一用来做图片缓存  
    private LruCache<Integer, Bitmap> mLruCache = new LruCache<Integer, Bitmap>(  
            cacheSize) {  
        @Override  
        protected int sizeOf(Integer key, Bitmap bitmap) {//复写sizeof()方法  
            // replaced by getByteCount() in API 12  
            return bitmap.getRowBytes() * bitmap.getHeight() / 1024; //这里是按多少KB来算  
        }  
    };

public MyListViewAdapter(Context context , List<ListViewItemContent> data)
{
mData = data;
mContext = context;
mInflater = LayoutInflater.from(context);
}

@Override
public int getCount() {
return mData.size();
}

@Override
public Object getItem(int position) {
return mData.get(position);
}

@Override
public long getItemId(int position) {
return position;
}

@Override
public View getView(int position, View convertView, ViewGroup parent) {
      ViewHolder holder = null;
          //如果缓存convertView为空,则需要创建View
          if(convertView == null)
          {
              holder = new ViewHolder();
              //根据自定义的Item布局加载布局
              convertView = mInflater.inflate(R.layout.list_item, null);
              holder.img = (ImageView)convertView.findViewById(R.id.item_img);
              holder.title = (TextView)convertView.findViewById(R.id.item_name);
              //将设置好的布局保存到缓存中,并将其设置在Tag里,以便后面方便取出Tag
              convertView.setTag(holder);
          }else
          {
              holder = (ViewHolder)convertView.getTag();
          }
          loadBitmap(mData.get(position).mImgId,holder.img);
//          holder.img.setBackgroundResource(mData.get(position).mImgId);
          holder.title.setText(mData.get(position).mImgName);
                                                          
          return convertView;
}


    private void loadBitmap(int resId, ImageView image) {  
        AsyncImageLoader asyncLoader = new AsyncImageLoader(this.mContext, image, mLruCache);//什么一个异步图片加载对象  
        Bitmap bitmap = asyncLoader.getBitmapFromMemoryCache(resId);//首先从内存缓存中获取图片  
        if (bitmap != null) {  
            image.setImageBitmap(bitmap);//如果缓存中存在这张图片则直接设置给ImageView  
        } else {  
            image.setImageResource(R.drawable.ic_launcher);//否则先设置成默认的图片  
            asyncLoader.execute(resId);//然后执行异步任务AsycnTask 去网上加载图片  
        }  
    } 

    //ViewHolder静态类
    static class ViewHolder
    {
        public ImageView img;
        public TextView title;
    }

}


现在的item用了本地的39张图片,结果滑到最后一张的时候总是闪退。 少一个item都没事。
求大神帮忙看下问题出在哪里。

1个回答