Uploading images to listview

0

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

    
asked by anonymous 16.04.2015 / 22:20

1 answer

0

Try to put the LoadBitmapImage object inside your ViewHolder.

en.stackoverflow.com / questions / 45947 / how-to-reduce-the-quality-of-an-image-in-android

    
16.04.2015 / 22:53