这里是重写了adapter
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView==null){
holder=new NewsHolder();
convertView=inflater.inflate(R.layout.newitem, null);
holder.img=(ImageView)convertView.findViewById(R.id.img);
holder.title=(TextView)convertView.findViewById(R.id.title);
holder.content=(TextView)convertView.findViewById(R.id.content);
convertView.setTag(holder);
}else{
holder=(NewsHolder)convertView.getTag();
}
holder.img.setId(position);
holder.img.setTag(this.imgPath[position]);
info=newsList.get(position);
if(info !=null){
holder.title.setText(info.getTitle());
holder.content.setText(info.getContent());
}
//这里是异步调用图片
new CanvasImageTask().execute(holder.img);
holder.img.setDrawingCacheEnabled(true); return convertView;
}这是异步类
public class CanvasImageTask extends AsyncTask<ImageView, Void, Bitmap> {
private ImageView gView; protected Bitmap doInBackground(ImageView... views) {
Bitmap bmp = null;
ImageView view = views[0];
// 根据iconUrl获取图片并渲染,iconUrl的url放在了view的tag中。
if (view.getTag() != null) {
try {
URL url = new URL(view.getTag().toString());
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream stream = conn.getInputStream();
bmp = BitmapFactory.decodeStream(stream);
stream.close();
} catch (Exception e) {
Log.v("img", e.getMessage());
return null;
}
}
this.gView = view;
return bmp;
} protected void onPostExecute(Bitmap bm) {
if (bm != null) {
//此处更新图片
this.gView.setImageBitmap(bm);
this.gView = null;
}
}
我想问的是,adapter里的getView是当信息的显示超过一个屏幕的高度时,在listView中向下滑动鼠标或拖曳时都会触发getView加载信息,这样会导致了重复执行new CanvasImageTask().execute(holder.img);从而重复加载获取网络图片,大大增加了上网流量和浏览速度,该怎么解决这个问题呢?
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
if(convertView==null){
holder=new NewsHolder();
convertView=inflater.inflate(R.layout.newitem, null);
holder.img=(ImageView)convertView.findViewById(R.id.img);
holder.title=(TextView)convertView.findViewById(R.id.title);
holder.content=(TextView)convertView.findViewById(R.id.content);
convertView.setTag(holder);
}else{
holder=(NewsHolder)convertView.getTag();
}
holder.img.setId(position);
holder.img.setTag(this.imgPath[position]);
info=newsList.get(position);
if(info !=null){
holder.title.setText(info.getTitle());
holder.content.setText(info.getContent());
}
//这里是异步调用图片
new CanvasImageTask().execute(holder.img);
holder.img.setDrawingCacheEnabled(true); return convertView;
}这是异步类
public class CanvasImageTask extends AsyncTask<ImageView, Void, Bitmap> {
private ImageView gView; protected Bitmap doInBackground(ImageView... views) {
Bitmap bmp = null;
ImageView view = views[0];
// 根据iconUrl获取图片并渲染,iconUrl的url放在了view的tag中。
if (view.getTag() != null) {
try {
URL url = new URL(view.getTag().toString());
HttpURLConnection conn = (HttpURLConnection) url
.openConnection();
conn.setDoInput(true);
conn.connect();
InputStream stream = conn.getInputStream();
bmp = BitmapFactory.decodeStream(stream);
stream.close();
} catch (Exception e) {
Log.v("img", e.getMessage());
return null;
}
}
this.gView = view;
return bmp;
} protected void onPostExecute(Bitmap bm) {
if (bm != null) {
//此处更新图片
this.gView.setImageBitmap(bm);
this.gView = null;
}
}
我想问的是,adapter里的getView是当信息的显示超过一个屏幕的高度时,在listView中向下滑动鼠标或拖曳时都会触发getView加载信息,这样会导致了重复执行new CanvasImageTask().execute(holder.img);从而重复加载获取网络图片,大大增加了上网流量和浏览速度,该怎么解决这个问题呢?
解决方案 »
- ContentProvider和ContentResolver还有SQLiteDatabase的关系
- 手机不能开机,请高手指点该如何恢复出厂设置?
- 两台手机同步显示画面技术
- listview 选中一个checkbox为什么会自动选中多个checkbox
- 模拟器信号问题
- 显示界面和运行界面不一致
- 安卓手机1G内存和2G内存,对速度影响大吗?
- Android 用achartengine 画折线图怎么显示不正确
- eclipse emulator control unable to send command to emulator 求解
- 各位大哥哥大姐姐把帮帮忙
- NDK 开发时,想调用 AudioTrack.h 中的类和方法,怎么调用?
- 如何判断蓝牙是否连接....
cavasImageTask取到图片后把图片放到map里
键是listivew的position。
在getView里面先判断map里是否有,如果有直接拿,没有的话再asyncTask.execute.
直接convertView.getTag()的时候得到的是前面显示过的,已经有图片了。
所以你应该
if(map.containsKey(position+"")){
holder.img.setimagebitmap(map.get(position));
}else{
holder.img.setimagebitmap(null);
}
是我一时疏忽了,问题解决啦
我现在也碰到了这个问题,不知道怎么解决,现在的思路就是滑动太快或者拖拽时不发送图片请求,但是这个不知道怎么实现。