Autore Topic: Come si aggiornano i dati visualizzati da una listView?  (Letto 682 volte)

Offline Haltar Dhrim

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Come si aggiornano i dati visualizzati da una listView?
« il: 23 Dicembre 2010, 12:54:22 CET »
0
Salve a tutti, il mio problema è questo:
Ho una listView che devo riempire con il nome degli elementi di una data tabella di un database.
Fin qui nessun problema, i dati si vedono e funziona tutto.
Però adesso ho aggiunto un Option Menu, quello che spunta dal basso per capirsi, che cambia la tabella sulla quale fare la query.
Quando clicco su uno dei bottoni però non succede proprio niente, la listView non viene aggiornata...

Ho provato a usare Cursor.requery() e notifyDataSetChanged, ma forse li ho usti male e non è cambiato niente...

Questo è l'XML del menu:

Codice (XML): [Seleziona]
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:id="@+id/prodotti_all"
         android:title="@string/prodotti_all"
         android:orderInCategory="1"/>
    <item android:id="@+id/fornitori_all"
         android:title="@string/fornitori_all"
         android:orderInCategory="2"/>
    <item android:id="@+id/produttori_all"
         android:title="@string/produttori_all"
         android:orderInCategory="3"/>
    <item android:id="@+id/categorie_all"
         android:title="@string/categorie_all"
         android:orderInCategory="4"/>
</menu>

Questo è il codice dell'Activity:

Codice (Java): [Seleziona]
public class ListaProdotti extends ListActivity {
       
        private static final int PRODOTTI_SINGLE = 0;
        private static final int PRODOTTI = 1;
        private static final int FORNITORI = 2;
        private static final int PRODUTTORI = 3;
        private static final int CATEGORIE = 4;
        private AironeDatabase db;
    private Cursor dbCursor;
    private SimpleCursorAdapter catalogList;

        @Override
        protected void onCreate(Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
        setContentView(R.layout.mostra_lista);
       
        db = new AironeDatabase(this);
        db.open();
       
        showData(PRODOTTI);
        db.close();
        }

        private void showData(int qualeQuery) {
               
                String[] from=null;
                switch (qualeQuery){
                case PRODOTTI:
                {
                        dbCursor = db.fetchProdotti(null);
                        dbCursor.requery();
                        startManagingCursor(dbCursor);
                from = new String[]{AironeDatabase.ProdottiMetaData.PRODOTTI_NOME};
               
                break;
            }
            case FORNITORI:
            {
                dbCursor = db.fetchFornitori(null);
                dbCursor.requery();
                        startManagingCursor(dbCursor);
                from = new String[]{AironeDatabase.FornitoriMetaData.FORNITORI_NOME};
               
                break;
                }
            case PRODUTTORI:
            {
                dbCursor = db.fetchProduttori(null);
                dbCursor.requery();
                        startManagingCursor(dbCursor);
                from = new String[]{AironeDatabase.ProduttoriMetaData.PRODUTTORI_NOME};
               
                break;
            }
            case CATEGORIE:
            {
                dbCursor = db.fetchCategorie(null);
                dbCursor.requery();
                        startManagingCursor(dbCursor);
                from = new String[]{AironeDatabase.CategorieMetaData.CATEGORIE_NOME};
               
                break;
            }}
               

        int[] to = new int[]{R.id.nomeSingolo};
        catalogList = new SimpleCursorAdapter(this, R.layout.mostra_lista_singolo, dbCursor, from, to);
        setListAdapter(catalogList);
        return;
    }
       
        @Override
        public boolean onCreateOptionsMenu(Menu menu) {
            MenuInflater inflater = getMenuInflater();
            inflater.inflate(R.menu.all_menu, menu);
            return true;
        }
       
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle item selection
            switch (item.getItemId()) {
            case R.id.prodotti_all:
                return true;
            case R.id.fornitori_all:
                return true;
            case R.id.produttori_all:
                return true;
            case R.id.categorie_all:
                return true;
            default:
                return super.onOptionsItemSelected(item);
            }
        }

        @Override
        protected void onListItemClick(ListView l, View v, int position, long id) {
                super.onListItemClick(l, v, position, id);
               
                int _id = (int)catalogList.getItemId(position);
        Intent intent = new Intent(getApplicationContext(), MostraProdotto.class);
        String pack = getPackageName();
        intent.putExtra(pack+".prId", _id);
       
        startActivityForResult(intent, PRODOTTI_SINGLE);
        }

        @Override
        protected void onActivityResult(int requestCode, int resultCode, Intent data) {
                super.onActivityResult(requestCode, resultCode, data);
                db = new AironeDatabase(this);
        db.open();
       
        showData(PRODOTTI);
        db.close();
        }

}

Grazie mille a tutti!
« Ultima modifica: 23 Dicembre 2010, 12:59:55 CET da Haltar Dhrim »

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come si aggiornano i dati visualizzati da una listView?
« Risposta #1 il: 23 Dicembre 2010, 14:08:31 CET »
+1
Codice (Java): [Seleziona]
        @Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle item selection
            switch (item.getItemId()) {
            case R.id.prodotti_all:
                return true;
            case R.id.fornitori_all:
                return true;
            case R.id.produttori_all:
                return true;
            case R.id.categorie_all:
                return true;
            default:
                return super.onOptionsItemSelected(item);
            }
        }

Cosa fa questo metodo?

Offline Haltar Dhrim

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:Come si aggiornano i dati visualizzati da una listView?
« Risposta #2 il: 23 Dicembre 2010, 14:51:42 CET »
0
 :-[ Lo riempio e torno a riferire...

Offline Haltar Dhrim

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:Come si aggiornano i dati visualizzati da una listView?
« Risposta #3 il: 23 Dicembre 2010, 14:58:35 CET »
0
Codice (Java): [Seleziona]
@Override
        public boolean onOptionsItemSelected(MenuItem item) {
            // Handle item selection
            switch (item.getItemId()) {
            case R.id.prodotti_all:
                db.open();
                showData(PRODOTTI);
                db.close();
                return true;
            case R.id.fornitori_all:
                db.open();
                showData(FORNITORI);
                db.close();
                return true;
            case R.id.produttori_all:
                db.open();
                showData(PRODUTTORI);
                db.close();
                return true;
            case R.id.categorie_all:
                db.open();
                showData(CATEGORIE);
                db.close();
                return true;
            default:
                return super.onOptionsItemSelected(item);
            }
        }

Questo è il metodo modificato... In effetti se non chiamo la visualizzazione dei dati è difficile che succeda qualcosa...  :'(
Ho aggiunto anche un notifyDataSetChanged alla fine del metodo showData...

Grazie Ricky!

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +506
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Come si aggiornano i dati visualizzati da una listView?
« Risposta #4 il: 23 Dicembre 2010, 15:14:21 CET »
0
Credo che nel metodo showData puoi togliere i vari dbCursor.requery() ;)

Offline Haltar Dhrim

  • Nuovo arrivato
  • *
  • Post: 10
  • Respect: 0
    • Mostra profilo
  • Sistema operativo:
    Windows XP
Re:Come si aggiornano i dati visualizzati da una listView?
« Risposta #5 il: 24 Dicembre 2010, 13:48:02 CET »
0
Sì, va anche senza.
Bene penso che si possa chiudere... Grazie ancora!