Autore Topic: ListView con immagine di preview  (Letto 242 volte)

Offline ValerioAdo

  • Utente normale
  • ***
  • Post: 323
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Huawei Ascend g525
  • Sistema operativo:
    windows 8.1
ListView con immagine di preview
« il: 30 Luglio 2015, 15:35:49 CEST »
0
Salve a tutti!

La mi app ha una List view con una immagine (che sarà una immagine di preview) che scarica da un db di aruba, la lista con i dati di testo viene caricata correttamente ma quando si tratta di caricare anche le immagini si nota perfettamente che la ImageView del primo elemento della lista "passa in rassegna" tutte le immagini che ha scaricato (o che ha già in memoria) per poi settare di conseguenza tutte le altre e non sempre correttamente...
Ho provato a fare il debug del codice che uso per creare la lista (metto il suddetto codice qui di seguito)
Codice (Java): [Seleziona]
public class panoramiUserAdapter  extends ArrayAdapter<panorami.User> {
    Context mcontext;
    Typeface tf, tf2;
    String download;
    String name,poi,distance,drive,walk;
    TextView tvData,TvDistance,tvDriveTime,tvWalkTime;

    public panoramiUserAdapter(Context context, ArrayList<panorami.User> users) {
        super(context, 0, users);
        this.mcontext = context;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {

        // Get the data item for this position
        panorami.User user = getItem(position);
        // Check if an existing view is being reused, otherwise inflate the view
        if (convertView == null) {
            convertView = LayoutInflater.from(getContext()).inflate(R.layout.panoramirow, parent, false);
        }
        tf2= Typeface.createFromAsset(mcontext.getAssets(), "DancingRegular.ttf");

        // Lookup view for data population
        tvData = (TextView) convertView.findViewById(R.id.nome);
        TvDistance = (TextView) convertView.findViewById(R.id.Distanza);
        tvDriveTime = (TextView) convertView.findViewById(R.id.DriveDist);
        tvWalkTime = (TextView) convertView.findViewById(R.id.WalkDist);
        ImageView preview=(ImageView) convertView.findViewById(R.id.preview);

        download=user.path+user.image;
        name=user.image;


        if(!name.equals("")) {
            tvData.setText(user.nome);
            TvDistance.setText(user.DriveTime);
            tvWalkTime.setText(user.WalkTime);
            tvDriveTime.setText(user.Distanza);

            tvData.setTypeface(tf2);

            new LoadImage(preview).execute(download);

        }else {

            // Populate the data into the template view using the data object
            tvData.setText(user.nome);
            TvDistance.setText(user.DriveTime);
            tvWalkTime.setText(user.WalkTime);
            tvDriveTime.setText(user.Distanza);

            tvData.setTypeface(tf2);

        }
        return convertView;
    }

    private class LoadImage extends AsyncTask<String, String, Bitmap> {

        ImageView img = null;

        public LoadImage(ImageView img) {
            this.img = img;
        }

        @Override
        protected void onPreExecute() {
            super.onPreExecute();
        }

        protected Bitmap doInBackground(String... args) {
            Bitmap bitmap = null;
            try {
                File file = new File(getContext().getCacheDir(), name);
                if (file.exists()) {
                    BitmapFactory.Options options = new BitmapFactory.Options();
                    options.inPreferredConfig = Bitmap.Config.ARGB_8888;
                    bitmap = BitmapFactory.decodeFile(String.valueOf(file), options);
                } else {

                    bitmap = BitmapFactory.decodeStream((InputStream) new URL(args[0]).getContent());

                    String stringa = new URL(args[0]).toString();

                    File folder = new File(getContext().getCacheDir(), "");
                    folder.mkdir();

                    File imageFile = new File(folder, download);
                    imageFile.createNewFile();
                    FileDownloader.downloadFile(stringa, imageFile);

                }
            } catch (Exception e) {
                e.printStackTrace();
            }
            return bitmap;
        }

        protected void onPostExecute(Bitmap image) {
            if (image != null) {
                img.setImageBitmap(image);
                img.setScaleType(ImageView.ScaleType.FIT_XY);
            }
        }
    }
}

e ho notato che ,dopo che ha settato tutti i dati che gli sono stati consegnati, esegue da capo il tutto costruendo nuovamente la lista...


Avete qualche idea del perché mi dia questi problemi oppure un metodo migliore per far vedere queste immagini di preview?

Grazie mille!