I have a listview with this layout
layoutlist.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Praia riviera são lourenço"
android:background="@drawable/fundop"
android:textColor="#000000"
android:gravity="center"
android:id="@+id/nomePraia"
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true" />
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@+id/nomePraia"
android:layout_above="@+id/bt"
android:layout_marginBottom="10dp"
android:layout_marginTop="10dp">
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+id/fotoPraia"
android:layout_centerHorizontal="true" />
<ProgressBar
android:indeterminate="true"
android:id="@+id/progress"
style="?android:attr/progressBarStyle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
</RelativeLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Coemçar a descrição ...."
android:id="@+id/descricao"
android:maxLength="400"
android:textColor="#000000"
android:layout_alignTop="@+id/btFavorito"
android:layout_toEndOf="@+id/btFavorito"
android:gravity="left"
android:layout_toStartOf="@+id/bt"
android:layout_toRightOf="@+id/btFavorito"
android:layout_toLeftOf="@+id/bt"
android:layout_marginBottom="10dp"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"/>
<RelativeLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_marginBottom="10dp">
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btFavorito"
android:layout_alignParentBottom="true"
android:background="@drawable/ic_action_favorite"
android:layout_marginLeft="7dp"
android:layout_alignParentLeft="true"
android:layout_alignParentStart="true" />
<Button
style="?android:attr/buttonStyleSmall"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/btVerMais"
android:id="@+id/btVerMais"
android:background="#fff"
android:textColor="@color/wallet_link_text_light"
android:layout_alignTop="@+id/bt"
android:layout_centerHorizontal="true" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/bt"
android:background="@drawable/ic_action_overflow"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_alignParentEnd="true" />
</RelativeLayout>
adapter.java
View view;
view = convertView;
final ViewHolder holder;
if(convertView == null) {
view = mInflater.inflate(R.layout.layoutlist, parent, false);
holder = new ViewHolder();
holder.foto = (ImageView) view.findViewById(R.id.fotoPraia);
holder.btFavorito = (ImageButton) view.findViewById(R.id.btFavorito);
holder.nomePraia = (TextView) view.findViewById(R.id.nomePraia);
holder.descricao = (TextView) view.findViewById(R.id.descricao);
holder.bt = (ImageButton) view.findViewById(R.id.bt);
holder.btVerMais = (Button) view.findViewById(R.id.btVerMais);
holder.pb = (ProgressBar) view.findViewById(R.id.progress);
holder.position=position;
view.setTag(holder);
bitmapTask = new LoadBitmapImage(view,holder.foto,width,context);
}else {
view = convertView;
holder = (ViewHolder)view.getTag();
bitmapTask = new LoadBitmapImage(view,holder.foto,width,context);
}
holder.pb.setVisibility(View.VISIBLE);
holder.foto.setImageBitmap(fundoBranco);
final ListenerItem categoria = itens.get(position);
final int drawableId = context.getResources().getIdentifier(categoria.nome_foto, "drawable", packageName);
bitmapTask.execute(drawableId);
String desc="";
if(categoria.descricao.length()<397){
holder.btVerMais.setVisibility(View.INVISIBLE);
desc=categoria.descricao;
}else{
holder.btVerMais.setVisibility(View.VISIBLE);
for(int i=0;i<397;i++){
desc=desc+categoria.descricao.charAt(i);
}
desc=desc+"...";
}
holder.nomePraia.setText(Html.fromHtml("<b><i>"+categoria.nome+"<i/><b/>"));
holder.descricao.setText(Html.fromHtml(desc));
/* if(categoria.nome.length()>20){
holder.nomePraia.setHeight(200);
Log.e("entrou",categoria.nome);
}*/
if (categoria.favorito) {
holder.btFavorito.setImageResource(R.drawable.ic_action_favorite_v);
} else {
holder.btFavorito.setImageResource(R.drawable.ic_action_favorite);
}
The class that loads the image on this line bitmapTask.execute(drawableId);
LoadBitmapImage.java
public class LoadBitmapImage extends AsyncTask<Integer, Void, Bitmap> {
private final WeakReference<ImageView> imageViewReference;
private View view;
private final int width;
private Context context;
public LoadBitmapImage(View view,ImageView imageView,int width,Context context) {
this.view = view;
this.width = width;
this.context = context;
// Use a WeakReference para ter certeza que sua ImageView sera reciclada
imageViewReference = new WeakReference<ImageView>(imageView);
}
// Carregando a imagem em background
@Override
protected Bitmap doInBackground(Integer... drawableId) {
// Aqui voce utiliza seus proprios metodos para carregar e configurar sua Bitmap
Bitmap bm = BitmapFactory.decodeResource(context.getResources(), drawableId[0]);
bm = bm.createScaledBitmap(bm, width, width, true);
return bm;
}
// Quando completo, coloque o Bitmap em sua ImageView
@Override
protected void onPostExecute(Bitmap bitmap) {
if (imageViewReference != null && bitmap != null) {
final ImageView imageView = imageViewReference.get();
AdapterListView.ViewHolder holder;
holder = (AdapterListView.ViewHolder)view.getTag();
if (imageView != null) {
holder.foto.setImageBitmap(bitmap);
}
holder.pb.setVisibility(View.INVISIBLE);
}
}
}
This is loading the normal image, but there is a problem. When I pass the listview very fast and to in some image it loads the wrong image and it shows the images before showing the right image, I was wondering if it has like when I call the class to load the image I link the image to an item so that even if it happens fast and you have more than one image loading know in which item to put not to put the image in the wrong item