Autore Topic: Listview e adapter impazzito  (Letto 730 volte)

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
Listview e adapter impazzito
« il: 17 Novembre 2013, 17:37:24 CET »
0
Ciao ragazzi vi illustro il mio problema: ho una list view popolata da una serie di oggetti. In particolare ogni oggetto ha un intero che può valere 1 -1 o 0. Io in base a questo intero devo fissare un'immagine diversa solo che se provo a farlo nell'adapter non funziona in quanto le immagini vengono messe un pò a caso e quando effettuo lo scrollo cambiano O.o Ho provato ad usare la classe statica interna (viewHolder) ma non cambia nulla.
Sapete aiutarmi??

Offline GabMarioPower

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 606
  • Respect: +152
    • Github
    • Google+
    • gabrielemariotti
    • GabMarioPower
    • Mostra profilo
  • Play Store ID:
    GAB+MARIO+DEV
  • Sistema operativo:
    Ubuntu 14.04 , Win 10
Re:Listview e adapter impazzito
« Risposta #1 il: 17 Novembre 2013, 18:06:26 CET »
0
Scrivi l'adapter.

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
Re:Listview e adapter impazzito
« Risposta #2 il: 17 Novembre 2013, 18:19:44 CET »
0
Eccolo:
Codice (Java): [Seleziona]
package com.example.besttweet;

import java.io.IOException;
import java.io.InputStream;
import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
import java.net.URLConnection;
import java.util.ArrayList;
import java.util.List;

import com.nostra13.universalimageloader.core.DisplayImageOptions;
import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.assist.ImageScaleType;
import com.nostra13.universalimageloader.core.display.SimpleBitmapDisplayer;

import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.net.Uri;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ArrayAdapter;
import android.widget.ImageView;
import android.widget.TextView;

public class RisArrayAdapter extends ArrayAdapter<TwitterStatus> {
        private ImageView notiziaImage;
        private TextView name;
        private TextView status;
        private Context context;
        private DisplayImageOptions options;
        protected ImageLoader imageLoader = ImageLoader.getInstance();

        private List<TwitterStatus> items = new ArrayList<TwitterStatus>();

        public RisArrayAdapter(Context context, int textViewResourceId,
                        List<TwitterStatus> objects) {
                super(context, textViewResourceId, objects);
                this.items = objects;
                this.context = context;
                options = new DisplayImageOptions.Builder()
                                .showStubImage(R.drawable.ic_stub)
                                .showImageForEmptyUri(R.drawable.ic_stub) // resource or
                                                                                                                        // drawable
                                .showImageOnFail(R.drawable.ic_stub) // resource or drawable
                                .resetViewBeforeLoading(false) // default
                                .cacheInMemory(true) // default
                                .cacheOnDisc(true) // default
                                .imageScaleType(ImageScaleType.IN_SAMPLE_POWER_OF_2) // default
                                .bitmapConfig(Bitmap.Config.ARGB_8888) // default
                                .displayer(new SimpleBitmapDisplayer()) // default
                                .build();

        }

        public int getCount() {
                return this.items.size();
        }

        public TwitterStatus getItem(int index) {
                return this.items.get(index);
        }

        public View getView(int position, View convertView, ViewGroup parent) {
                View row = convertView;
                final ViewHolder viewHolder;
                if (row == null) {
                        LayoutInflater inflater = (LayoutInflater) this.getContext()
                                        .getSystemService(Context.LAYOUT_INFLATER_SERVICE);

                        row = inflater.inflate(R.layout.chartrow, parent, false);
                        viewHolder = new ViewHolder();
                        viewHolder.name = (TextView) row.findViewById(R.id.statusname);
                        viewHolder.notiziaImage = (ImageView) row
                                        .findViewById(R.id.statusImage);
                        viewHolder.status = (TextView) row.findViewById(R.id.status);
                        viewHolder.imageVote= (ImageView) row.findViewById(R.id.imageVote);
                       
                         row.setTag(viewHolder);
             row.setTag(R.id.statusname, viewHolder.name);
             row.setTag(R.id.statusImage, viewHolder.notiziaImage);
             row.setTag(R.id.status, viewHolder.status);
             row.setTag(R.id.imageVote, viewHolder.imageVote);
                }else{
            viewHolder = (ViewHolder) row.getTag();
        }

//              TwitterStatus item = getItem(position);
//              TwitterStatus item = items.get(position);
               
                viewHolder.name.setText(items.get(position).getName());

                viewHolder.status.setText(items.get(position).getStatus());

                imageLoader.displayImage(items.get(position).getURLimage(), viewHolder.notiziaImage, options);

                if (items.get(position).getFeedback()==1) {
                        viewHolder.imageVote.setImageResource(R.drawable.up);
                }else if (items.get(position).getFeedback()==-1) {
                        viewHolder.imageVote.setImageResource(R.drawable.down);
                }
               
                return row;
        }

        static class ViewHolder {
                ImageView notiziaImage, imageVote;
                TextView name;
                TextView status;

        }

}

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Listview e adapter impazzito
« Risposta #3 il: 17 Novembre 2013, 18:29:27 CET »
0
Il problema è quasi sicuramente dovuto alla cache della ListView (le View sono ri-utilizzate man mano che scorrono fuori).

Come prima cosa manca la gestione del caso 0.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
Re:Listview e adapter impazzito
« Risposta #4 il: 17 Novembre 2013, 18:36:32 CET »
0
Caso 0???

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
Re:Listview e adapter impazzito
« Risposta #5 il: 17 Novembre 2013, 18:46:31 CET »
0
In particolare ogni oggetto ha un intero che può valere 1 -1 o 0. Io in base a questo intero devo fissare un'immagine diversa
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline andreaginobili

  • Nuovo arrivato
  • *
  • Post: 42
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows 7, Ubuntu
Re:Listview e adapter impazzito
« Risposta #6 il: 17 Novembre 2013, 18:51:06 CET »
0
avevi ragione!! grazie mille :)