Autore Topic: listview dopo scroll.. perdita di posizione  (Letto 256 volte)

Offline xixietto

listview dopo scroll.. perdita di posizione
« il: 21 Ottobre 2015, 15:55:57 CEST »
0
Salve ho una listview con un adapter (personalizzata)
il mio problema è questo...
ho un elenco di 15 righe
al click delle righe presenti nel layout tutto funziona correttamente..
ma se si fa uno scroll per visualizzate le altre righe si sfasa la posizione...

il layout senza scroll
0   a
1   b
2   c
3   d
4   e
5   f
se faccio uno scroll ottengo ad esempio
.....
5  f
0  g
1  h
2  i
3  l
4  m
...
e come se ripartisse da 0 anzicchè continuare con 6 7 8 ect
Codice (Java): [Seleziona]
class myCustomObject {
    private String text1;
    private int text2;

    public String getText1(){

        return this.text1;
    }
    public void setText1(String text1){        this.text1= text1;
    }

    public int getText2(){
        return this.text2;
    }
    public void setText2(int text2){
        this.text2= text2;
    }

    public myCustomObject(String text1, int text2) {
        this.text1 = text1;
        this.text2 = text2;
    }


}




public class Adapter_MainActivity extends BaseAdapter {
    private ArrayList mapData;
    Context context;
    int layoutResourceId;

    Holder holder;

    public Adapter_MainActivity(Context context, int layoutResourceId, Map<Integer, myCustomObject> arList) {
        this.layoutResourceId = layoutResourceId;
        this.context = context;

        mapData = new ArrayList();
        mapData.addAll(arList.entrySet());
    }

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


    @Override
    public Map.Entry<Integer, myCustomObject> getItem(int position) {
        return (Map.Entry) mapData.get(position);
    }

    @Override
    public long getItemId(int position) {
        return 0;
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
        if(view == null) {

            holder = new Holder();

            LayoutInflater inflater = ((Activity)context).getLayoutInflater();

            view = inflater.inflate(layoutResourceId, parent, false);

            holder.textView = (TextView)view.findViewById(R.id.textViewList);
            holder.textView2 = (TextView)view.findViewById(R.id.numero);

            if (position % 2 == 1) {
                view.setBackgroundColor(Color.BLUE);
            } else {
                view.setBackgroundColor(Color.CYAN);
            }
            FloatingActionButton fab = (FloatingActionButton) view.findViewById(R.id.fab);
            fab.setTag(position);
            fab.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //vibratore
                    Vibrator mVibrator= (Vibrator) context.getSystemService(context.VIBRATOR_SERVICE);
                    // Vibrate for 500 milliseconds
                    mVibrator.vibrate(200);
                    int position = (Integer) view.getTag();
                    Log.d("errore1", String.valueOf(position)); //funziona
                    DbHelper helper = new DbHelper(context);
                    SQLiteDatabase db = helper.getReadableDatabase();
                    String titol= getItem(position).getValue().getText1();
                    int numero= getItem(position).getValue().getText2();

                           // getItem(position).getValue().setText2(4);
                    Log.d("errore3", titol + "  " + numero); //funziona

                    //valore incremento
                    String[] selectionArg = {titol};
                    Cursor p = db.rawQuery("SELECT _id FROM contatore WHERE titolo=?", selectionArg);
                    int tot = 0;
                    while (p.moveToNext()) {
                        Cursor g = db.rawQuery("SELECT * FROM promemoria WHERE idcont=? ORDER BY _id DESC LIMIT 1", new String[]{p.getString(0)});
                        while (g.moveToNext()) {
                            String Valore_in = g.getString(3);//ultimo valore incremento inserito
                            int valore_in = Integer.parseInt(Valore_in);
                            int numer = Integer.parseInt(String.valueOf(numero));
                            tot = numer + valore_in;

                            //data
                            long date = System.currentTimeMillis();
                            SimpleDateFormat sdf = new SimpleDateFormat("E, dd/MM/yyyy h:mm a");
                            String dateString = sdf.format(date);

                            ContentValues values = new ContentValues();
                            values.put("numero", tot);
                            values.put("data", String.valueOf(dateString));
                            values.put("valore_incremento", valore_in);
                            values.put("incremento_decremento", "+");
                            values.put("idcont", g.getString(5));
                            db.insert("promemoria", null, values); //inserimento nella tabella
                            Log.d("errore", "numero=" + String.valueOf(tot) + "   valore incremento =" + Valore_in + "totale " + tot); //non funziona bene  prende un'altra posizione

                        }
                    }
                    Log.d("errore2", String.valueOf(position));//non funziona bene  prende un'altra posizione
                     getItem(position).getValue().setText2(tot);
                    notifyDataSetChanged();

                }
            });

            FloatingActionButton meno = (FloatingActionButton) view.findViewById(R.id.meno);
            meno.setTag(position);
            meno.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View view) {
                    //vibratore
                    Vibrator mVibrator= (Vibrator) context.getSystemService(context.VIBRATOR_SERVICE);
                    // Vibrate for 500 milliseconds
                    mVibrator.vibrate(200);
                    int position = (Integer) view.getTag();
                    Log.d("errore1", String.valueOf(position)); //funziona

                    DbHelper helper = new DbHelper(context);
                    SQLiteDatabase db = helper.getReadableDatabase();
                    String titol= getItem(position).getValue().getText1();
                    int numero= getItem(position).getValue().getText2();

                    // getItem(position).getValue().setText2(4);
                    Log.d("errore3", titol + "  " + numero); //funziona

                    //valore incremento
                    String[] selectionArg = {titol};
                    Cursor p = db.rawQuery("SELECT _id FROM contatore WHERE titolo=?", selectionArg);
                    int tot = 0;
                    while (p.moveToNext()) {
                        Cursor g = db.rawQuery("SELECT * FROM promemoria WHERE idcont=? ORDER BY _id DESC LIMIT 1", new String[]{p.getString(0)});
                        while (g.moveToNext()) {
                            String Valore_in = g.getString(3);//ultimo valore incremento inserito
                            int valore_in = Integer.parseInt(Valore_in);
                            int numer = Integer.parseInt(String.valueOf(numero));
                            tot = numer - valore_in;

                            //data
                            long date = System.currentTimeMillis();
                            SimpleDateFormat sdf = new SimpleDateFormat("E, dd/MM/yyyy h:mm a");
                            String dateString = sdf.format(date);

                            ContentValues values = new ContentValues();
                            values.put("numero", tot);
                            values.put("data", String.valueOf(dateString));
                            values.put("valore_incremento", valore_in);
                            values.put("incremento_decremento", "-");
                            values.put("idcont", g.getString(5));
                            db.insert("promemoria", null, values); //inserimento nella tabella
                            Log.d("errore", "numero=" + String.valueOf(tot) + "   valore incremento =" + Valore_in + "totale " + tot); //non funziona bene  prende un'altra posizione

                        }
                    }
                    Log.d("errore2", String.valueOf(position));//non funziona bene  prende un'altra posizione
                    getItem(position).getValue().setText2(tot);
                    notifyDataSetChanged();


                }
            });

            view.setTag(holder);
        } else {
            holder = (Holder)view.getTag();
        }

        Map.Entry<Integer, myCustomObject> item = getItem(position);
        holder.textView.setText(item.getValue().getText1());
        holder.textView2.setText(String.valueOf(item.getValue().getText2()));

        return view;
    }
    public void add(Map<Integer, myCustomObject> map) {
        mapData.addAll(map.entrySet());
    }
    public void clear() {
        mapData.clear();
    }

}
class Holder {
    TextView textView, textView2;
}
« Ultima modifica: 21 Ottobre 2015, 22:48:53 CEST da xixietto »