Java GridView行为不正确
我有以下问题: 我有一个gridview,它由ImageAdapter提供动力,ImageAdapter从internet下载图像并提供给gridview。这是伟大的工作,但有一个问题,是吓坏了我。问题是应该填充屏幕的前10个图像加载正确。尽管第11条显示为空白,但出于某种未知的原因,似乎是直接从convertView中获取的。图像12显示正确,下面的所有图像均为空白,即使它们具有可从中下载的有效URL 这是我的图像适配器Java GridView行为不正确,java,android,gridview,Java,Android,Gridview,我有以下问题: 我有一个gridview,它由ImageAdapter提供动力,ImageAdapter从internet下载图像并提供给gridview。这是伟大的工作,但有一个问题,是吓坏了我。问题是应该填充屏幕的前10个图像加载正确。尽管第11条显示为空白,但出于某种未知的原因,似乎是直接从convertView中获取的。图像12显示正确,下面的所有图像均为空白,即使它们具有可从中下载的有效URL 这是我的图像适配器 package com.wm.grid; import java.io
package com.wm.grid;
import java.io.IOException;
import java.io.InputStream;
import java.net.MalformedURLException;
import java.net.URL;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.GridView;
import android.widget.ImageView;
public class ImageAdapter extends BaseAdapter {
private Context mContext;
public String[] mThumbIds;
public Bitmap[] bmp;
public Bitmap bitmapPlaceholder;
public ImageAdapter(Context c,String[] m) {
mContext = c;
mThumbIds = m;
initBitmapListWithPlaceholders();
}
public void initBitmapListWithPlaceholders(){
int count = mThumbIds.length;
bmp = new Bitmap[count];
for(int i=0;i<count;i++){
bmp[i]=bitmapPlaceholder;
}
}
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) {
Log.v("POSITION","P"+position+convertView);
ImageView imageView;
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(210, 150));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(1, 1, 1, 1);
Bitmap bm = getBitmap(setURL(mThumbIds[position]),position);
bmp[position] = bm;
imageView.setImageBitmap(bm);
} else {
imageView = (ImageView) convertView;
imageView.setImageBitmap(bmp[position]);
}
//imageView.setImageBitmap(getBitmap(setURL(mThumbIds[position])));
//imageView.setImageResource(mThumbIds[position]);
return imageView;
}
private URL setURL (String urls){
try{
URL urli = new URL(urls);
return urli;
}
catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
private Bitmap getBitmap (URL url,int position){
try{
Log.v("POSITION","Loading "+position+url);
Bitmap bm = BitmapFactory.decodeStream((InputStream) url.getContent());
return bm;
}
catch (IOException e) {
e.printStackTrace();
}
return null;
}
/* public Integer[] AddItems(Integer[] a){
final Integer[] aThumbIds;
final int i;
aThumbIds = a;
Integer[] a2 = new Integer[mThumbIds.length + aThumbIds.length];
System.arraycopy(mThumbIds, 0, a2, 0, mThumbIds.length);
System.arraycopy(aThumbIds, 0, a2, mThumbIds.length, aThumbIds.length);
mThumbIds = a2;
return mThumbIds;
}
*/
}
上面的结果是,图像10、12和13以及下面的所有图像均为空白
欢迎提供任何线索。事先非常感谢
编辑:还有一件事。如果我这样修改代码:
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(210, 150));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(1, 1, 1, 1);
Bitmap bm = getBitmap(setURL(mThumbIds[position]),position);
bmp[position] = bm;
imageView.setImageBitmap(bm);
} else {
imageView = (ImageView) convertView;
imageView.setImageBitmap(getBitmap(setURL(mThumbIds[position]),position));//DOWNLOAD IMAGE AGAIN
}
图像显示正确,但是应用程序运行速度慢了两倍,因为它总是下载图像 尝试在项目中实现缓存
if (convertView == null) { // if it's not recycled, initialize some attributes
imageView = new ImageView(mContext);
imageView.setLayoutParams(new GridView.LayoutParams(210, 150));
imageView.setScaleType(ImageView.ScaleType.CENTER_CROP);
imageView.setPadding(1, 1, 1, 1);
Bitmap bm = getBitmap(setURL(mThumbIds[position]),position);
bmp[position] = bm;
imageView.setImageBitmap(bm);
} else {
imageView = (ImageView) convertView;
imageView.setImageBitmap(getBitmap(setURL(mThumbIds[position]),position));//DOWNLOAD IMAGE AGAIN
}