리스트 아이템에 이미지가있는리스트 뷰가 있습니다. listview에 대한 사용자 지정 어댑터를 사용하고 있습니다. AsyncTask를 사용하여 어댑터의 각 목록 항목에 대한 이미지를 다운로드합니다. 내 사용자 지정 어댑터의 코드 :리스트 뷰에 이미지를 올바르게로드 중
public class AdapterUcomment extends ArrayAdapter<UserModel> {
public AdapterUcomment(Activity context, List<UserModel> list) {
super(context, R.layout.layout_comment_item, list);
this.context = context;
this.list = list;
}
class ViewHolder {
protected TextView text1, text2, text3;
protected ImageView imagev;
}
@Override
public View getView(final int position, View convertView, ViewGroup parent) {
View view = null;
if (convertView == null) {
LayoutInflater inflator = context.getLayoutInflater();
view = inflator.inflate(R.layout.layout_comment_item, null);
final ViewHolder viewHolder = new ViewHolder();
viewHolder.text1 = (TextView) view.findViewById(R.id.txtv_uname);
viewHolder.text2 = (TextView) view.findViewById(R.id.txtv_comment);
viewHolder.text3 = (TextView) view.findViewById(R.id.txtv_cmntTime);
viewHolder.imagev = (ImageView) view.findViewById(R.id.imgv_upic);
view.setTag(viewHolder);
} else {
view = convertView;
}
positionPic = position;
final ViewHolder holder = (ViewHolder) view.getTag();
String uname = list.get(position).getUname();
String ufbid = list.get(position).getUfbid();
String ucomment = list.get(position).getUcomment();
String ucomment_time = list.get(position).getUcomment_time();
holder.text1.setText(Html.fromHtml(uname));
holder.text2.setText(Html.fromHtml(ucomment));
holder.text3.setText(Html.fromHtml(ucomment_time));
// downloading the image using AsyncTask
new UserPic(position, ufbid, holder.imagev).executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
return view;
}
public class UserPic extends AsyncTask<String, Void, String> {
String ufbid = null;
Bitmap bitmap = null;
ImageView imageView;
int pos = 0;
public UserPic(int pos, String ufbid, ImageView imageView) {
this.ufbid = ufbid;
this.imageView = imageView;
this.pos = pos;
}
@Override
protected String doInBackground(String... strings) {
URL imageURL = null;
try {
imageURL = new URL(".......");
} catch (MalformedURLException e) {
e.printStackTrace();
}
try {
bitmap = BitmapFactory.decodeStream(imageURL.openConnection().getInputStream());
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
@Override
protected void onPostExecute(String s) {
imageView.setImageBitmap(bitmap);
super.onPostExecute(s);
}
}
모든 보인다는 다음과 같이 첫 눈에 잘 작동합니다 : image of listview with properly loaded images 그러나 문제는 내가 마지막 항목으로 스크롤 한 후 다시 첫 번째 항목으로 스크롤 할 때 시작 첫 번째 목록 항목 이미지가 다음과 같이 사라집니다. image of listview with improperly loaded image 이렇게하면 어떻게 제거하고 이미지를 제대로 listview에서 제대로로드 할 수 있습니까? 미리 감사드립니다.
이미지 로더 라이브러리를 사용하십시오. 링크 : https://github.com/nostra13/Android-Universal-Image-Loader –
질문이 bazillion 번 요청되었습니다 ... 재사용보기 때문입니다 ... 1. getView가 1 위치에서 호출되면 asynctask1이 시작됩니다. 2. getView가 시작됩니다. 위치 2에서 다시 호출하면 포인트 1의 뷰가 재사용되고 asynctask2 ... 3을 시작합니다. asynctask2가 완료되고 오른쪽 이미지가 설정됩니다. 4. asynctask1이 완료되고 잘못된 이미지가 설정됩니다. ** 쉬운 솔루션 프로덕션 응용 프로그램의 경우) URL을 imageview에 태그로 저장 AsyncTask에 전달 된 URL과 비교하여 비트 맵을 설정하기 전에 ... 다른 경우 설정하지 않음 ** – Selvin