我编码在gridview中显示少量图像。图像从网址显示。 我面临的问题是当我滚动时图像被替换..并且一旦开始图像的顺序一直在变化..如果我点击网格中的任何图像,这会导致完整图像的显示延迟。 请帮忙!
代码:
public class ImageAdapter extends BaseAdapter {
private Context mContext;
private TextView txtUrl;
private String response;
public ImageView imageView;
public static String[] mThumbIds;
public ImageAdapter(Context c,String resp) {
mContext = c;
response = resp.trim();
mThumbIds = resp.split(",");
}
public int getCount() {
return mThumbIds.length;
}
public Object getItem(int position) {
return null;
}
public long getItemId(int position) {
return 0;
}
// create a new ImageView for each item referenced by the Adapter
public View getView(int position, View convertView, ViewGroup parent) {
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(95, 95));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(6, 6, 6, 6);
} else {
imageView = (ImageView) convertView;
}
try {
new LoadImageGrid(imageView).execute(mThumbIds[position]);
} catch(Exception e) {
txtUrl.setText("Error: Exception");
}
return imageView;
}
class LoadImageGrid extends AsyncTask<String, Void, Drawable>
{
ImageView imageView;
public LoadImageGrid(ImageView im){
imageView = im;
}
@Override
protected Drawable doInBackground(String... args) {
String url = args[0];
Drawable d = null;
try {
d = Drawable.createFromStream((InputStream) new URL(url).getContent(), "src");
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return d;
}
@Override
protected void onPostExecute(Drawable d) {
imageView.setImageDrawable(d);
}
答案 0 :(得分:1)
滚动网格视图时,不可见的图像视图将返回getView()作为convertView参数。但是你的asyncTask不会停止,并调用
imageView.setImageDrawable(d);
导致将下载的图像应用于错误位置的视图。因为现在你重复使用相同的imageView。快速修复不是使用convertView。但它会减慢你的应用程序的速度。
答案 1 :(得分:0)
这似乎与转换视图有关。当您使用转换视图重用图像空间时,您应该使用该范围内的Imageview。我建议在你当前的类代码中找到它的id的imageview,然后再播放它。