我正在尝试在android中使用listview。我需要从服务器获取listItem图像。我搜索并找到了一些代码。它工作,但当我滚动我的listItem图像正在重新加载。
特此我的代码
public View getView(int position, View convertView, ViewGroup parent) {
// TODO Auto-generated method stub
View vi = convertView;
if (vi == null)
vi = inflater.inflate(R.layout.movierow, parent, false);
TextView txtMovieName = (TextView) vi.findViewById(R.id.movieName);
TextView textYear = (TextView) vi.findViewById(R.id.txtMovieYear);
Movie movie = data.get(position);
String strUrl=String.format( "http://yatanadam.com/FilmLines/admin/FilmImages/%d.png",movie.id);
final ImageView img=(ImageView) vi.findViewById(R.id.imgMovieRow);
img.setTag(position);
new DownloadImageTask(img,position)
.execute(strUrl);
textYear.setText(movie.year);
txtMovieName.setText(movie.name);
return vi;
}
public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
ImageView bmImageVw;
int imgVwId;
public DownloadImageTask(ImageView bmImage,int id) {
this.bmImageVw = bmImage;
this.imgVwId=id;
}
protected Bitmap doInBackground(String... urls) {
String urldisplay = urls[0];
Bitmap mIcon11 = null;
try {
InputStream in = new java.net.URL(urldisplay).openStream();
mIcon11 = BitmapFactory.decodeStream(in);
} catch (Exception e) {
Log.e("Error","ERRORdoInBackground");
e.printStackTrace();
}
return mIcon11;
}
protected void onPostExecute(Bitmap result) {
if (this.imgVwId==this.bmImageVw.getTag()){
bmImageVw.setImageBitmap(result);
}
}
有没有人可以帮助我?我在这上面超过4个小时。 THX。
答案 0 :(得分:0)
1)覆盖适配器上的下一个方法:
@Override
public boolean hasStableIds(){ return true; }
2)添加缓存方法以避免第二次下载图像。 您可以在http://developer.android.com/training/displaying-bitmaps/cache-bitmap.html
上找到有关缓存图像的更多信息希望这个帮助
答案 1 :(得分:0)
我认为你应该使用任何这些库来帮助缓存加载的图像。
Android通用图像加载器的示例应用已实现在listview中加载图像。你可以使用它。