Autore Topic: ListView e CheckBox usando i dati del database SQLite  (Letto 836 volte)

Offline bkey

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    htc
  • Play Store ID:
    no
  • Sistema operativo:
    mac os x 10.5
ListView e CheckBox usando i dati del database SQLite
« il: 20 Ottobre 2011, 21:06:37 CEST »
+1
Salve sto facendo un'applicazione dove vado ad estrarre dei dati dal database e li seleziono con una checkbox ma il problema è che quando li seleziono e scendo con la scroll a selezionare altri valori quando ritorno nei valori precedenti non li trovo più selezionati non so dove sia l'errore ho provato tante volte ma nn so più dove sbattere la testa vi allego il codice
Grazie

Codice (Java): [Seleziona]
   public View getView(int pos, View inView, ViewGroup parent) {
        View v = inView;
        if (v == null) {
            LayoutInflater inflater = (LayoutInflater) mContext
                    .getSystemService(Context.LAYOUT_INFLATER_SERVICE);
            v = inflater.inflate(R.layout.single_item, null);
        }

        if (!this.mCurrentCursor.moveToPosition(pos)) {
            throw new SQLException("CustomSqlCursorAdapter.getView: Unable to move to position: "+pos);
        }

        CheckBox cBox = (CheckBox) v.findViewById(R.id.bcheck);

        // save the row's _id value in the checkbox's tag for retrieval later
        cBox.setTag(Integer.valueOf(this.mCurrentCursor.getInt(0)));

        if (this.mCurrentCursor.getInt(SqlHelper.COLUMN_SELECTED_idx) != 0) {
            cBox.setChecked(true);
            Log.w("SqlHelper", "CheckBox true for pos "+pos+", id="+this.mCurrentCursor.getInt(1));
        } else {
            cBox.setChecked(false);
            Log.w("SqlHelper", "CheckBox false for pos "+pos+", id="+this.mCurrentCursor.getInt(0));
        }
        //cBox.setOnClickListener(this);
        cBox.setOnCheckedChangeListener(new OnCheckedChangeListener() {

            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {

                Log.w("SqlHelper", "Selected a CheckBox and in onCheckedChanged: "+isChecked);

                Integer _id = (Integer) buttonView.getTag();
                ContentValues values = new ContentValues();
                values.put(SqlHelper.COLUMN_SELECTED,
                        isChecked ? Integer.valueOf(1) : Integer.valueOf(0));
                mDbHelper.dbSqlite.beginTransaction();
                try {
                    if (mDbHelper.dbSqlite.update(SqlHelper.TABLE_NAME, values, "_id=?",
                            new String[] { Integer.toString(_id) }) != 1) {
                        throw new SQLException("onCheckedChanged failed to update _id="+_id);
                    }
                    mDbHelper.dbSqlite.setTransactionSuccessful();
                } finally {
                    mDbHelper.dbSqlite.endTransaction();
                }

                Log.w("SqlHelper", "-- _id="+_id+", isChecked="+isChecked);
            }
        });

        TextView txtTitle = (TextView) v.findViewById(R.id.txtTitle);
        txtTitle.setText(this.mCurrentCursor.getString(this.mCurrentCursor
                .getColumnIndex(SqlHelper.COLUMN_TITLE)));

        return (v);
    }
« Ultima modifica: 26 Ottobre 2011, 18:36:25 CEST da Verandi »

Offline neoben

  • Nuovo arrivato
  • *
  • Post: 35
  • Respect: 0
    • carminebenedetto
    • neoben86
    • Mostra profilo
    • Neoben Web
  • Dispositivo Android:
    Samsung Galaxy Next
  • Sistema operativo:
    Ubuntu 12.04
Re:ListView e CheckBox usando i dati del database SQLite
« Risposta #1 il: 26 Ottobre 2011, 10:23:43 CEST »
0
Sii un pò più preciso e magari posta solo il codice relativo alla selezione dei checkbox in vista sul topic.

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ListView e CheckBox usando i dati del database SQLite
« Risposta #2 il: 26 Ottobre 2011, 18:51:22 CEST »
0
Ti ho editato il post inserendo la parte di codice che riguarda il check delle checkbox.
Io comunque cambierei questa parte:
Codice (Java): [Seleziona]
try {
                    if (mDbHelper.dbSqlite.update(SqlHelper.TABLE_NAME, values, "_id="+_id,
                            null) {
                        throw new SQLException("onCheckedChanged failed to update _id="+_id);
                    }
                    mDbHelper.dbSqlite.setTransactionSuccessful();
                } finally {
                    mDbHelper.dbSqlite.endTransaction();
                }

Offline Verandi

  • Utente normale
  • ***
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:ListView e CheckBox usando i dati del database SQLite
« Risposta #3 il: 26 Ottobre 2011, 19:32:06 CEST »
0
Ho provato l'applicazione sul telefono. Il problema è il seguente: quando selezioni una checkbox, la selezione viene salvata nel database, ma il cursor usato dall'adapter non viene aggiornato con i nuovi dati. Appena scorri la lista e ritorni all'elemento che viene cambiato, per visualizzare la checkbox selezionata o meno, l'adapter si baserà sul cursor che ha ancora i dati vecchi e quindi la visualizzerà ancora deselezionata. Per risolvere, lascerei totalmente perdere questo metodo e userei il classico metodo con l'arraylist, aggiornando il database una volta uscito dall'activity.  ;-)

Offline bkey

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    htc
  • Play Store ID:
    no
  • Sistema operativo:
    mac os x 10.5
Re:ListView e CheckBox usando i dati del database SQLite
« Risposta #4 il: 27 Ottobre 2011, 14:57:49 CEST »
0
grazie per le risposte vediamo come posso risolverlo