Autore Topic: Salvare lo stato di una ListView.  (Letto 511 volte)

Offline Improving

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Google+
    • lorenz522
    • Mostra profilo
  • Dispositivo Android:
    Android HTC Desire Z
  • Play Store ID:
    Lorenzo Del Soldato
  • Sistema operativo:
    Ubuntu Linux 11.04
Salvare lo stato di una ListView.
« il: 11 Gennaio 2011, 15:07:20 CET »
0
Ciao a tutti,
sono a chiedervi un parere più che altro.
un "come fareste voi"

ho una listview, che contiene i dati di un contatto con la relativa immagine.
passando da un'activity (ma anche riavviando l'applicazione) a un'altra ovviamente questi dati si persono.

Come fareste voi per assicurare la persistenza dei dati?
un percorso facile che mi viene in mente è salvarsi l'id del contatto nelle sharedpreferences. Per poi, ogni volta che si rientra nell'onresume si inserisce il processo che ripopola la listview (per quanto mi riguarda ho max 5 elementi)

ho cercato un po' a giro ma non ho trovato niente di preciso.

Voi che ne pensate?
come fareste?



Offline Improving

  • Utente junior
  • **
  • Post: 56
  • Respect: 0
    • Google+
    • lorenz522
    • Mostra profilo
  • Dispositivo Android:
    Android HTC Desire Z
  • Play Store ID:
    Lorenzo Del Soldato
  • Sistema operativo:
    Ubuntu Linux 11.04
Re:Salvare lo stato di una ListView.
« Risposta #1 il: 22 Febbraio 2011, 15:31:12 CET »
0
Mi rispondo da solo, per quello che ho fatto io perlomeno.

Ho usato un Db. poi basta fare semplicemente una cosa di questo tipo

Codice (Java): [Seleziona]
private final SQLiteOpenHelper dbHelper = new SQLiteOpenHelper(this,
                        "NOME_DB", null, 1) {

                @Override
                public void onCreate(SQLiteDatabase db) {
                        Log.i(LOG_TAG, "Inizio Creazione DB");
                        StringBuilder createQuery = new StringBuilder();
                        createQuery.append("CREATE TABLE \"NOME_TABELLA\" (");
                        createQuery
                                        .append("           \"_id\" INTEGER PRIMARY KEY AUTOINCREMENT,");
                        createQuery.append("        \"CAMPO1\" TEXT NOT NULL,");
                        createQuery.append("        \"CAMPO2\" TEXT NOT NULL,");
                        createQuery.append("        \"CAMPO3\" TEXT,");
ecc.......

                        createQuery.append(")");
                        db.execSQL(createQuery.toString());
                }

                @Override
                public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
                        // Nope
                        Log.i(LOG_TAG, "Aggiornamento non implementato");
                }

        };

poi, si leggono i valori contenuti nella listview e chiamo:

Codice (Java): [Seleziona]
       
private void InsertRecord(String val1, String val2....) {
                ContentValues values = new ContentValues();
                values.put(ListMetaData.NAME, Val1);
                values.put(ListMetaData.ADDRESS,Val2);
ecc...
// ListMetaData contiene i nomi dei campi

                db = dbHelper.getWritableDatabase();

                long a = db.insert("NOME_TABELLA", nullColumnHack, values);
                Log.i(LOG_TAG, "Record inseriti: " + a);
        }

Ovviamente l'ingresso dei dati si può migliorare invece di passare il parametri uno per uno. E' solo un esempio generalissimo.
tutto qui.
L'argomento è vasto, ma giusto per dire che l'uso dell'sqllite è banale