0
당신의 도움이 필요합니다!GridView 어댑터 이미지를 표시 할 때 AsyncTask 이상한 동작이 발생했습니다.
내 응용 프로그램에서는 이미지를 GridView
에 표시 할 때 이상한 동작이 발생합니다. 셀은 기본 R.id.noimage
및 이전에 본 이미지 대신 이미지를 표시합니다. 이 어댑터는 비트 맵 AsyncTask
을로드하기 위해 추가 한 후에 나타납니다.
내가 뭘 잘못하고 있니?
코드 :보기가 null보기를 팽창 및 태그를 설정할 때이 아니 다음이 태그를 사용하는 경우
public View getView(int position, View convertView, ViewGroup parent) {
ViewHolder holder = new ViewHolder();
View vi = null;
ImageView image;
if(convertView==null) {
vi = inflater.inflate(R.layout.gall_item, null);
Log.i("info","convertView==null");
} else {
vi = inflater.inflate(R.layout.gall_item, null);
Log.i("info","else");
}
holder.position = position;
image = (ImageView)vi.findViewById(R.id.img);
TextView url_img = (TextView)vi.findViewById(R.id.url_img);
TextView cer = (TextView)vi.findViewById(R.id.cer);
TextView idi = (TextView)vi.findViewById(R.id.ids);
url_img.setText(img2[position]);
cer.setText(cer_ar[position]);
idi.setText(id_ar[position]);
new LoadImageT(holder).execute(image, img1[position],activity.getApplicationContext(),position);
return vi;
}
class LoadImageT extends AsyncTask<Object, Void, Bitmap> {
Context context;
private ImageView imv;
private String url;
private Bitmap bitmap = null;
private int posS;
private ViewHolder mHolder;
public LoadImageT(ViewHolder holder) {
mHolder = holder;
}
@Override
protected Bitmap doInBackground(Object... params) {
imv = (ImageView) params[0];
url = (String) params[1];
context = (Context)params[2];
posS = (Integer) params[3];
bitmap = imageLoader.getBitmaptrue(url,imv,context);
return bitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
if (mHolder.position == posS) {
imv.setVisibility(View.VISIBLE);
imv.setImageBitmap(result);
} else {
int stub_id = R.drawable.noimage;
imv.setImageResource(stub_id);
}
}
}
레이아웃을 두 번 팽창시키는 데있어 Ther의 의미가 없습니다. convertView == null 일 때, null이 아닌 경우. 널 때만 팽창해야합니다. ** 추신 : 이것은 아마 당신의 문제를 해결하지 않을 것이며 단지 관찰 일뿐입니다. ** –