Chào anh chị. Em có bài tập java và e bị 1 chỗ không biết xử lý s. Em có 1 listview và 1 custom adaptep(Em sẽ gọi là arrayAdapterNation nó chứa 1 object Nation trong đó). Trong Adapter em load ảnh từ url về. Và mỗi khi em scroll thì nó liên tục thay đổi ảnh cho tới khi em dừng 1 chỗ. E không biết xử lý sao cả. Anh chị cho em giải pháp với ạ. E đang dùng AsyncTask để load ảnh về. Anh chị làm theo hướng của em. Hoặc là mới e sẽ tiếp nhận.
package com.example.nationinfo;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.os.AsyncTask;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.ImageView;
import android.widget.TextView;
import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.ArrayList;
public class ArrayAdapterNation extends BaseAdapter {
ArrayList<Nation> arrayList;
int layout;
Context context;
public ArrayAdapterNation(ArrayList<Nation> arrayList, int layout, Context context) {
this.arrayList = arrayList;
this.layout = layout;
this.context = context;
}
@Override
public int getCount() {
return arrayList.size();
}
@Override
public Object getItem(int position) {
return null;
}
@Override
public long getItemId(int position) {
return 0;
}
private class ViewHolder{
TextView nameNation;
ImageView imageViewNation;
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {
final ViewHolder viewHolder;
if(convertView == null){
viewHolder = new ViewHolder();
LayoutInflater inflater = (LayoutInflater) context.getSystemService(context.LAYOUT_INFLATER_SERVICE);
convertView = inflater.inflate(layout,null, false);
viewHolder.nameNation = convertView.findViewById(R.id.nationName);
viewHolder.imageViewNation = convertView.findViewById(R.id.imageViewNation);
convertView.setTag(viewHolder);
}else{
viewHolder = (ViewHolder) convertView.getTag();
}
viewHolder.nameNation.setText(arrayList.get(position).getCountryName());
String urlImage = "https://img.geonames.org/flags/x/"+arrayList.get(position).getCountryCode()+".gif";
if(viewHolder.imageViewNation != null){
new AsyncTask<String, Void, Bitmap>(){
@Override
protected Bitmap doInBackground(String... strings) {
URL url = null;
try {
url = new URL(strings[0]);
} catch (MalformedURLException e) {
e.printStackTrace();
}
HttpURLConnection connection = null;
try {
connection = (HttpURLConnection) url.openConnection();
} catch (IOException e) {
e.printStackTrace();
}
connection.setDoInput(true);
try {
connection.connect();
} catch (IOException e) {
e.printStackTrace();
}
InputStream input = null;
try {
input = connection.getInputStream();
} catch (IOException e) {
e.printStackTrace();
}
Bitmap myBitmap = BitmapFactory.decodeStream(input);
return myBitmap;
}
@Override
protected void onPostExecute(Bitmap result) {
if(result != null){
viewHolder.imageViewNation.setImageBitmap(result);
}
}
}.execute(urlImage);
}
return convertView;
}
}