Autore Topic: ListView problemi posizione  (Letto 477 volte)

Offline Tiru

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows 10
ListView problemi posizione
« il: 16 Agosto 2017, 19:07:55 CEST »
0
Salve, sto riscontrando un problema usando una ListView contenente item con Button e testo vario..
Il mio problema è che quando clicco sul pulsante nel mio caso "Preferiti" di un item mi cambia l'immagine dell'Item successivo:
Ecco qui l'adapter:
Codice (Java): [Seleziona]
public class AdapterHome extends BaseAdapter implements ListAdapter {
    private List<String> list1 = new ArrayList<String>();
    private List<String> list2 = new ArrayList<String>();
    private List<Float> list3 = new ArrayList<Float>();
    private List<Integer> list4 = new ArrayList<Integer>();
    private List<Boolean> preferiti = new ArrayList<Boolean>();
    private Context context;

    private int prec;

    private View LinView;

    private ImageView favorite;

    private LinearLayout Primo;
    private LinearLayout Secondo;

    public AdapterHome(List<String> nomeCuoco, List<String> nomeRicetta, List<Float> media, List<Integer> num, Context context) {
        this.list1 = nomeCuoco;
        this.list2 = nomeRicetta;
        this.list3 = media;
        this.list4 = num;
        this.context = (Context) context;


        for(int i=0;i<list1.size()-1;i++){
            preferiti.add(i,false);
        }
    }

    @Override
    public int getCount() {
        return list1.size();
    }

    @Override
    public Object getItem(int pos) {
        return list1.get(pos);
    }

    @Override
    public long getItemId(int pos) {
        return 0;
        //just return 0 if your list items do not have an Id variable.
    }

    @Override
    public View getView(final int position, View convertView, final ViewGroup parent) {
        View view = convertView;
        if (view == null) {
            LayoutInflater inflater = (LayoutInflater) context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            view = inflater.inflate(R.layout.prova, null);
        }
        //Handle TextView and display string from your list
        final TextView listCuoco = (TextView)view.findViewById(R.id.nomeUser);
        TextView listRicetta = (TextView)view.findViewById(R.id.nomeRicetta);

        TextView listNum = (TextView)view.findViewById(R.id.num);
        favorite = (ImageView) view.findViewById(R.id.favorite);

        Primo = (LinearLayout) view.findViewById(R.id.PrimaParte);
        Secondo = (LinearLayout) view.findViewById(R.id.SecondaParte);

        listCuoco.setText(list1.get(position));
        listRicetta.setText(list2.get(position));
        listNum.setText(String.valueOf(list4.get(position)));

//quando clicco favorite
        favorite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                if(!preferiti.get(position)){
//sbaglia la posizione
                    System.out.println("Ciao!" + list2.get(position));
                    favorite.setImageResource(R.drawable.favorite_yes);
                    preferiti.set((position),true);
                }
                else{
                    favorite.setImageResource(R.drawable.favorite_no);
                    preferiti.set((position),false);
                }
            }
        });

        return view;
    }

}

ho gia trovato altri post riguardanti la posizione dei ListView ma nessuno sapeva dare risposte

Offline berpao

  • Utente junior
  • **
  • Post: 116
  • Respect: +8
    • Mostra profilo
  • Dispositivo Android:
    Samsung Galaxy S2
  • Play Store ID:
    Paolo Bersan
Re:ListView problemi posizione
« Risposta #1 il: 17 Agosto 2017, 08:50:07 CEST »
+1
Ciao, prova a cambiare l'immagine anzichè usando la variabile "favorite" usando la view passata al listener opportunamente castata a "ImageView"... quindi più o meno una cosa del genere:

favorite.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                ImageView currentFavImg=(ImageView)view;
                if(!preferiti.get(position)){
//sbaglia la posizione
                    System.out.println("Ciao!" + list2.get(position));
                    currentFavImg.setImageResource(R.drawable.favorite_yes);
                    preferiti.set((position),true);
                }
                else{
                    currentFavImg.setImageResource(R.drawable.favorite_no);
                    preferiti.set((position),false);
                }
            }
        });

La variabile "favorite" è dichiarata a livello di classe, non vorrei che fosse questo a fare casino. La variabile locale "view" è sempre l'oggetto che ha scatenato l'evento, quindi la tua immagine cliccata; controlla il codice che ho scritto ma dovrebbe essere giusto, fammi sapere se risolvi
Ciao
P

Offline Tiru

  • Utente junior
  • **
  • Post: 51
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    windows 10
Re:ListView problemi posizione
« Risposta #2 il: 17 Agosto 2017, 09:29:45 CEST »
0
Perfetto, grazie mille!