Autore Topic: Aggiornamento automatico di una ListView da database  (Letto 1262 volte)

Offline unit1

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 12.04 64bit
Aggiornamento automatico di una ListView da database
« il: 27 Aprile 2013, 11:14:40 CEST »
0
Salve,

Ho una ListView in un Activity caricata con:
Codice (Java): [Seleziona]
Cursor c=databaseMessage.getList();
MyCursorAdapter adapter=new MyCursorAdapter(this, c);
ListView listView =(ListView)findViewById(R.id.messList);
listView.setAdapter(adapter);
listView.setClickable(true);
listView.setOnItemClickListener(new OnItemClickListener(){...});

e un CursorAdapter

Codice (Java): [Seleziona]
        protected class MyCursorAdapter extends CursorAdapter{
                public MyCursorAdapter(Context context, Cursor c) {
                        super(context, c);
                        // TODO Auto-generated constructor stub
                }

                @Override
                public View newView(Context context, Cursor cursor, ViewGroup parent)
                {
                        return LayoutInflater.from(context).inflate(
                                android.R.layout.simple_list_item_2, null);
                }
         
                @Override
                public void bindView(View view, Context context, Cursor cursor)
                {
                        ((TextView) view.findViewById(android.R.id.text1)).setText(cursor.getString(cursor.getColumnIndex("message")));
                        ((TextView) view.findViewById(android.R.id.text2)).setText(cursor.getString(cursor.getColumnIndex("timestamp")));
                }
        }

Volevo sapere se si poteva fare che appena una tupla veniva aggiunta al database (da un altro servizio o da lui stesso, es: cancella..) lui se ne accorge e aggiorna la lista in automatico, e eventualmente come fare.

Grazie in anticipo :)

Offline jd4smart

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy s
  • Sistema operativo:
    Win7
Re:Aggiornamento automatico di una ListView da database
« Risposta #1 il: 27 Aprile 2013, 11:49:52 CEST »
0
premesso che credo tu abbia postato nella sezione sbagliata.....
ho fatto qualche tempo fa la stessa domanda: http://www.anddev.it/index.php/topic,10792.0.html senza ottenere risposta.

Se ti vuoi leggere, in quel post ho comunque presentato velocemente come ho risolto io il problema


Nel frattempo comunque mi sono guardato un po in giro e ti posso dire che l'unico modo per avere quello che ti serve, e restare fedeli a quelle che sono le linee guida di google, è creare un content provider che esporti il tuo DB.
A quel punto avrai le notifiche di update/change sul tuo database propagate in automatico al tuo cursor e quindi alla view.

Nel mio caso, trattandosi di un db privato contenente esclusivamente risultati di alcune elaborazioni (e quindi di alcun utilità ad altre applicazioni) ho optato per la soluzione su "rozza" senza content provider.
Vedi un po tu come si inquadra esattamente il tuo caso.  ;-)

Offline unit1

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 12.04 64bit
Re:Aggiornamento automatico di una ListView da database
« Risposta #2 il: 27 Aprile 2013, 12:03:01 CEST »
0
Si, hai ragione: la sezione è sbagliata. Ho fatto una ricerca nel forum, sono tornato indietro e non mi sono accorto che mi aveva cambiato sessione. Se qualche moderatore mi può spostare per rimediare al mio errore mi farebbe un grande favore :)

Anche nel mio caso il db è privato, quindi posso mettere una toppa e ritrovarmi tutti gli eventi che vanno a modificarlo, cmq continuo a cercare una soluzione più elegante.. se la trovo ti faccio sapere! Grazie della risposta :)

Post unito: 28 Aprile 2013, 02:31:27 CEST
android - notifyDataSetChanged example - Stack Overflow hai provato cosi? Io ci sto provando a capire qualcosa..
« Ultima modifica: 28 Aprile 2013, 02:31:28 CEST da unit1, Reason: Merged DoublePost »

Offline jd4smart

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: +1
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy s
  • Sistema operativo:
    Win7
Re:Aggiornamento automatico di una ListView da database
« Risposta #3 il: 29 Aprile 2013, 12:52:20 CEST »
0
Alla fine le toppe utilizzabili sono 2 (quel quello che ho trovato e capito io)

- usare il metodo deprecato requery per la classe cursor
- fare la requery "manualmente" all'interno dei metodi/funzioni che fanno a modificarti il database....ovvero utilizzare un secondo cursor e un secondo adapter, chiundendo successivamente il vecchio cursor e mettendo un bel null al vecchio adapter.

Offline blackgin

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1387
  • Respect: +164
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
  • Dispositivo Android:
    Galaxy Nexus
  • Sistema operativo:
    Mac OSX 10.8
Re:Aggiornamento automatico di una ListView da database
« Risposta #4 il: 29 Aprile 2013, 15:56:33 CEST »
0
Oppure usi il metodo attuale e corretto: http://www.anddev.it/index.php?topic=8538.0
Postate il LogCat LogCat LogCat LogCat LogCat

Offline mark92g

  • Nuovo arrivato
  • *
  • Post: 12
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    samsung galaxy next
  • Play Store ID:
    Shaze
Re:Aggiornamento automatico di una ListView da database
« Risposta #5 il: 31 Maggio 2013, 10:50:21 CEST »
0
Salve,

Ho una ListView in un Activity caricata con:
Codice (Java): [Seleziona]
Cursor c=databaseMessage.getList();
MyCursorAdapter adapter=new MyCursorAdapter(this, c);
ListView listView =(ListView)findViewById(R.id.messList);
listView.setAdapter(adapter);
listView.setClickable(true);
listView.setOnItemClickListener(new OnItemClickListener(){...});

e un CursorAdapter

Codice (Java): [Seleziona]
        protected class MyCursorAdapter extends CursorAdapter{
                public MyCursorAdapter(Context context, Cursor c) {
                        super(context, c);
                        // TODO Auto-generated constructor stub
                }

                @Override
                public View newView(Context context, Cursor cursor, ViewGroup parent)
                {
                        return LayoutInflater.from(context).inflate(
                                android.R.layout.simple_list_item_2, null);
                }
         
                @Override
                public void bindView(View view, Context context, Cursor cursor)
                {
                        ((TextView) view.findViewById(android.R.id.text1)).setText(cursor.getString(cursor.getColumnIndex("message")));
                        ((TextView) view.findViewById(android.R.id.text2)).setText(cursor.getString(cursor.getColumnIndex("timestamp")));
                }
        }

Volevo sapere se si poteva fare che appena una tupla veniva aggiunta al database (da un altro servizio o da lui stesso, es: cancella..) lui se ne accorge e aggiorna la lista in automatico, e eventualmente come fare.

Grazie in anticipo :)

Premetto che non sono un esperto... ma se il codice che prende i dati dal DB e carica la listview lo metti dentro "onResume()" dovrebbe fare esattamente quello che chiedi