Autore Topic: Prendere gli elementi selezionati di una checked listview  (Letto 1954 volte)

Offline elcondorpasa

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: 0
    • Google+
    • @matteocarde
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Windows 7
Prendere gli elementi selezionati di una checked listview
« il: 15 Ottobre 2011, 22:29:23 CEST »
0
Salve a tutti ho un problema... Sto cercando di trovare gli elementi selezionati in una checked listview:
In internet ho trovato questo metodo:

Codice (Java): [Seleziona]
long[] id = listView.getCheckedItemIds();
Però questa variabile inserita in un toast:

Codice (Java): [Seleziona]
final Toast toast = Toast.makeText(this, id.toString(), Toast.LENGTH_LONG);
mi mostra questo testo:

Codice: [Seleziona]
[J@4054fe70
se poi chiudo e riapro l'activity mi cambia il valore).

Cosa posso fare per trovare gli id degli elementi selezionati e cosa posso fare per poi far combaciare l'id con l'oggetto associato ?

Grazie in anticipo......    Matteo  :-)
"Le migliori applicazioni per Android non sono ancora pronte, questo perchè sarete voi, insieme ad altri sviluppatori come voi, a crearle"
-Sergey Brin

Stay Hungry Stay Foolish

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:Prendere gli elementi selezionati di una checked listview
« Risposta #1 il: 16 Ottobre 2011, 21:50:41 CEST »
0
Cosa significa secondo te
Codice (Java): [Seleziona]
long[] id ?
Postate il LogCat LogCat LogCat LogCat LogCat

Offline elcondorpasa

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: 0
    • Google+
    • @matteocarde
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #2 il: 16 Ottobre 2011, 22:03:34 CEST »
0
"Le migliori applicazioni per Android non sono ancora pronte, questo perchè sarete voi, insieme ad altri sviluppatori come voi, a crearle"
-Sergey Brin

Stay Hungry Stay Foolish

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #3 il: 16 Ottobre 2011, 22:16:03 CEST »
0
Come ha scritto blackgin, tu stampi l'oggetto long[], ovvero una rappresentazione testuale dell'oggetto long[]. A te serve sapere quali siano gli oggetti selezionati, ovvero gli elementi contenuti nel long[]. Se volessi, per esempio, l'id del primo elemento selezionato (ammesso che ci sia), dovresti scrivere:
Codice (Java): [Seleziona]
final Toast toast = Toast.makeText(this, id[0].toString(), Toast.LENGTH_LONG);Per poi far combaciare l'id con l'elemento selezionato, dovresti saperlo tu, perché non ci hai postato il codice di come associ gli elementi alla checked listview.  ;-)
« Ultima modifica: 16 Ottobre 2011, 22:36:54 CEST da Verandi »

Offline elcondorpasa

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: 0
    • Google+
    • @matteocarde
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #4 il: 16 Ottobre 2011, 22:21:00 CEST »
0
Come ha scritto blackgin, tu stampi l'oggetto long[], ovvero una rappresentazione testuale dell'oggetto long[]. A te serve sapere quali sono gli oggetti selezionati, ovvero gli elementi contenuti nel long[]. Se volessi, per esempio, l'id del primo elemento selezionato (ammesso che ci sia), dovresti scrivere:
Codice (Java): [Seleziona]
final Toast toast = Toast.makeText(this, id[0].toString(), Toast.LENGTH_LONG);Per poi far combaciare l'id con l'elemento selezionato, dovresti saperlo tu, perché non ci hai postato il codice di come associ gli elementi alla checked listview.  ;-)

Grazie per la risposta ma facendo come hai detto tu mi da errore in id[0].toString() e mi dice:

Codice: [Seleziona]
Cannot invoke toString() on the primitive type long

e mi dice di cambiare id da long in CharSequence
« Ultima modifica: 16 Ottobre 2011, 22:23:13 CEST da elcondorpasa »
"Le migliori applicazioni per Android non sono ancora pronte, questo perchè sarete voi, insieme ad altri sviluppatori come voi, a crearle"
-Sergey Brin

Stay Hungry Stay Foolish

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #5 il: 16 Ottobre 2011, 22:30:29 CEST »
0
Ok, puoi scrivere in uno dei due modi:
Codice (Java): [Seleziona]
final Toast toast = Toast.makeText(this, String.valueOf(id[0]), Toast.LENGTH_LONG);
Codice (Java): [Seleziona]
final Toast toast = Toast.makeText(this,""+ id[0], Toast.LENGTH_LONG);

Offline elcondorpasa

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: 0
    • Google+
    • @matteocarde
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #6 il: 16 Ottobre 2011, 22:33:43 CEST »
0
Tutti e due i metodi mi ritornano questo errore nel LogCat:

Codice: [Seleziona]
10-16 22:32:53.480: ERROR/AndroidRuntime(9013): java.lang.RuntimeException: Unable to start activity ComponentInfo{android.smile.matteo.spesaPRO/android.smile.matteo.spesaPRO.ProdottiActivity}: java.lang.ArrayIndexOutOfBoundsException
"Le migliori applicazioni per Android non sono ancora pronte, questo perchè sarete voi, insieme ad altri sviluppatori come voi, a crearle"
-Sergey Brin

Stay Hungry Stay Foolish

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #7 il: 16 Ottobre 2011, 22:35:22 CEST »
0
Ecco perché ho scritto "ammesso che ci sia".
L'array è vuoto, quindi la posizione 0 non c'è.  ;-)

Offline elcondorpasa

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: 0
    • Google+
    • @matteocarde
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #8 il: 16 Ottobre 2011, 22:43:10 CEST »
0
ma e ovvio che non ci sia perchè quando l'activity viene creata nessun elemento della checked è selezionato. L'array si popolerà quando io selezionerò un'elemento dalla checked list view.
"Le migliori applicazioni per Android non sono ancora pronte, questo perchè sarete voi, insieme ad altri sviluppatori come voi, a crearle"
-Sergey Brin

Stay Hungry Stay Foolish

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #9 il: 16 Ottobre 2011, 22:46:16 CEST »
0
Ma quindi cosa volevi fare?

Offline elcondorpasa

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: 0
    • Google+
    • @matteocarde
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #10 il: 16 Ottobre 2011, 22:54:45 CEST »
0
Io ho una checked list view con degli elementi (Pane, Focaccia, Pizza) che devono essere selezionati in modo che una volta premuto il bottone finito questi elementi che sono stati selezionati vengano immagazzinati in un database. Per fare questa ovviamente devo trovare l'ID dei valori e in seguito associare l'ID ad una stringa che contiene il mio valore. Il Toast è solamente una prova che serve a mostrarmi l'ID degli elementi selezionati.

Ti posto il codice per maggiore comprensione:
Codice (Java): [Seleziona]
final ListView listView = (ListView) findViewById(R.id.prodotti);
       
        final ArrayList<String> prodottoArray = new ArrayList<String>();
       
        final SQLiteDatabase myDb = openOrCreateDatabase("listaspesa_database",0,null);
        myDb.execSQL("CREATE TABLE IF NOT EXISTS prodotti (categoria VARCHAR , prodotto VARCHAR);");
        Cursor c = myDb.rawQuery("SELECT * FROM prodotti WHERE categoria = '" + categoria +"'", null);
        int prodottoId = c.getColumnIndex("prodotto");
        while(c.moveToNext()){
              String prodotto = c.getString(prodottoId);
              prodottoArray.add(prodotto);
        }
       
        final ArrayAdapter<String> prodottiList = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_checked, prodottoArray);
        listView.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
        prodottiList.notifyDataSetChanged();
        listView.setAdapter(prodottiList);
        Button finito = (Button) findViewById(R.id.finito);
        long[] id = listView.getCheckedItemIds();
        final Toast toast = Toast.makeText(this, ""+id[0] , Toast.LENGTH_LONG);
        finito.setOnClickListener(new OnClickListener(){

                        @Override
                        public void onClick(View arg0) {
                                toast.show();
                        }
               
        });

Tutto questo programma mi da l'errore postato in precedenza
"Le migliori applicazioni per Android non sono ancora pronte, questo perchè sarete voi, insieme ad altri sviluppatori come voi, a crearle"
-Sergey Brin

Stay Hungry Stay Foolish

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #11 il: 16 Ottobre 2011, 23:12:57 CEST »
0
L'errore te lo dà perché, come hai scritto, crei l'array ed il toast quando è impossibile che ci sia selezionato qualche elemento. La parte del trovare gli id selezionati e della creazione del toast va inserita nell'onclick del pulsante finito.

Inoltre hai bisogno di un custom adapter per ritornare gli id selezionati. Mi pare ci sia un tutorial in questo sito su come creare il tutto.

Offline elcondorpasa

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: 0
    • Google+
    • @matteocarde
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #12 il: 16 Ottobre 2011, 23:18:39 CEST »
0
L'idea è giusta ma mi ritorna lo stesso errore. Uffaaaaa  >:(

Ho fatto come mi hai detto:

Codice (Java): [Seleziona]
finito.setOnClickListener(new OnClickListener(){

                        @Override
                        public void onClick(View arg0) {
                        long[] id = listView.getCheckedItemIds();
                        final Toast toast = Toast.makeText(getApplicationContext(), ""+id[0], Toast.LENGTH_LONG);
                                toast.show();
                        }
               
        });
"Le migliori applicazioni per Android non sono ancora pronte, questo perchè sarete voi, insieme ad altri sviluppatori come voi, a crearle"
-Sergey Brin

Stay Hungry Stay Foolish

Offline Verandi

  • Moderatore
  • Utente normale
  • *****
  • Post: 378
  • Respect: +75
    • Mostra profilo
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #13 il: 16 Ottobre 2011, 23:21:19 CEST »
0

Inoltre hai bisogno di un custom adapter per ritornare gli id selezionati. Mi pare ci sia un tutorial in questo sito su come creare il tutto.

Offline elcondorpasa

  • Nuovo arrivato
  • *
  • Post: 40
  • Respect: 0
    • Google+
    • @matteocarde
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S
  • Sistema operativo:
    Windows 7
Re:Prendere gli elementi selezionati di una checked listview
« Risposta #14 il: 16 Ottobre 2011, 23:26:57 CEST »
0
Già. Scusa l'ho letto dopo potresti darmi un aiutino perchè sono solo agli inizi e non so nemmeno cosa sia un custom adapter.

Oddio mi sento troppo noob
"Le migliori applicazioni per Android non sono ancora pronte, questo perchè sarete voi, insieme ad altri sviluppatori come voi, a crearle"
-Sergey Brin

Stay Hungry Stay Foolish