Autore Topic: Stato checkbox in una listview  (Letto 310 volte)

Offline simox2601

  • Nuovo arrivato
  • *
  • Post: 30
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S4
  • Sistema operativo:
    Windows
Stato checkbox in una listview
« il: 18 Dicembre 2013, 17:34:39 CET »
0
Ciao a tutti !!

Ho un problema con i salvataggi degli stati delle checkbox in una listview. Ho una classe che gestisce una listview custom con il testo e la checkbox, all'interno di essa ho implementato il metodo che al cambiamento di stato della checkbox viene salvato lo stato con SharedPreferences. Il problema non capisco dove avviene; sembra che salva gli stati in modo corretto, ma quando apro l'activity per la seconda volta, si fleggano in automatico i check box ma in maniera diversa delle preferenze salvate. Il codice è il seguente:

Codice (Java): [Seleziona]
public class ListaShop extends BaseAdapter {
        List<String> list;
    ViewHolder holder;
    private LayoutInflater mInflater;
    Editor editor;
    Context context;

    public ListaShop(Context context, List<String> list) {
        this.list = list;
        this.context = context;
        mInflater = LayoutInflater.from(context);
    }

    public View getView(final int position, View convertView, ViewGroup parent) {
        SharedPreferences sharedPrefs = context.getSharedPreferences("CheckShop", Context.MODE_PRIVATE);
        if (convertView == null) {
            convertView = mInflater.inflate(R.layout.shop_list, null);
            holder = new ViewHolder();
            holder.txtName = (TextView) convertView.findViewById(R.id.label);
            holder.cB = (CheckBox)convertView.findViewById(R.id.checkshop);

            convertView.setTag(holder);
        }
        else {
            holder = (ViewHolder) convertView.getTag();
        }

        editor = sharedPrefs.edit();
        holder.txtName.setText(list.get(position));
       
        holder.cB.setChecked(sharedPrefs.getBoolean(Integer.toString(position), false));
       
        holder.cB.setOnCheckedChangeListener(new OnCheckedChangeListener() {
                        @Override
                        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                                if (buttonView.isChecked()) {
                                editor.putBoolean(Integer.toString(position), true);
                                editor.commit();
                        } else {
                                editor.putBoolean(Integer.toString(position), false);
                                editor.commit();
                        }
                }
        });
        return convertView;
    }

    static class ViewHolder {
        TextView txtName;
        CheckBox cB;
    }

    public int getCount() {
        return list.size();
    }

    public Object getItem(int position) {
        return list.get(position);
    }

    public long getItemId(int position) {
        return position;
    }
}

Ho provato a far partire l'activity in questo modo, salvando le preferenze, e poi commentando il codice "setOnCheckedChangeListener", facendo ripartire l'activity le preferenze vengono caricate in maniera corretta.

Come posso fare?????

Grazie in anticipo!!!!