我用gridview加载tomcat服务器上的图片,但是显示出来后会乱而且重复,滑动后图片又变成其他的了,我查了下是position的问题,但是实在不知道该怎么去修改
贴代码看看 看下你的 adapter 和 点击事件
public class HeroAdapter extends CommonBaseAdapter {
String url = "http://192.168.1.108:8080/heroServer/PictureServlet?iconName=";
public static List heros = new ArrayList();
private ViewHolder viewHolder = null;
private HashMap viewMap = new HashMap();
public HeroAdapter(Context context, List<HeroInfo> heros) {
super(context, heros);
this.heros = heros;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (!viewMap.containsKey(position) || viewMap.get(position) == null) {
convertView = LayoutInflater.from(context).inflate(
R.layout.gridview_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.ivIcon = (ImageView) convertView
.findViewById(R.id.hero_icon);
viewHolder.tvTitle = (TextView) convertView
.findViewById(R.id.hero_title);
viewHolder.tvName = (TextView) convertView
.findViewById(R.id.hero_name);
convertView.setTag(viewHolder);
viewMap.put(position, convertView);
} else {
convertView = viewMap.get(position);
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tvTitle.setText(heros.get(position).gethTitle());
viewHolder.tvName.setText(heros.get(position).getName());
System.out.println(position);
new AsyncTask<String, Void, Bitmap>() {
@Override
protected Bitmap doInBackground(String... params) {
HttpURLConnection conn = null;
try {
String uri = params[0] + heros.get(position).gethPicture();
URL url = new URL(uri);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() == HttpStatus.SC_OK) {
Bitmap bitmap = BitmapFactory.decodeStream(conn
.getInputStream());
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.disconnect();
}
return null;
}
protected void onPostExecute(Bitmap result) {
viewHolder.ivIcon.setImageBitmap(result);
}
}.execute(url);
return convertView;
}
class ViewHolder {
ImageView ivIcon;// 图标
TextView tvTitle;// 英雄称号
TextView tvName;// 英雄名字
}
}
public class HeroAdapter extends CommonBaseAdapter {
String url = "http://192.168.1.108:8080/heroServer/PictureServlet?iconName=";
public static List heros = new ArrayList();
private ViewHolder viewHolder = null;
private HashMap viewMap = new HashMap();
public HeroAdapter(Context context, List<HeroInfo> heros) {
super(context, heros);
this.heros = heros;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
if (!viewMap.containsKey(position) || viewMap.get(position) == null) {
convertView = LayoutInflater.from(context).inflate(
R.layout.gridview_item, parent, false);
viewHolder = new ViewHolder();
viewHolder.ivIcon = (ImageView) convertView
.findViewById(R.id.hero_icon);
viewHolder.tvTitle = (TextView) convertView
.findViewById(R.id.hero_title);
viewHolder.tvName = (TextView) convertView
.findViewById(R.id.hero_name);
convertView.setTag(viewHolder);
viewMap.put(position, convertView);
} else {
convertView = viewMap.get(position);
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.tvTitle.setText(heros.get(position).gethTitle());
viewHolder.tvName.setText(heros.get(position).getName());
System.out.println(position);
new AsyncTask<String, Void, Bitmap>() {
@Override
protected Bitmap doInBackground(String... params) {
HttpURLConnection conn = null;
try {
String uri = params[0] + heros.get(position).gethPicture();
URL url = new URL(uri);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(5000);
conn.setRequestMethod("GET");
if (conn.getResponseCode() == HttpStatus.SC_OK) {
Bitmap bitmap = BitmapFactory.decodeStream(conn
.getInputStream());
return bitmap;
}
} catch (Exception e) {
e.printStackTrace();
} finally {
conn.disconnect();
}
return null;
}
protected void onPostExecute(Bitmap result) {
viewHolder.ivIcon.setImageBitmap(result);
}
}.execute(url);
return convertView;
}
class ViewHolder {
ImageView ivIcon;// 图标
TextView tvTitle;// 英雄称号
TextView tvName;// 英雄名字
}
}