Autore Topic: verificare selezione/deselezione di oggetti in una ListView a scelta multipla  (Letto 1010 volte)

Offline pablo86

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    AVD: HVGA
  • Sistema operativo:
    Windows XP
Salve a tutti.

Ho il seguente problema:
ho una listview a scelta multipla. quando un elemento viene selezionato viene aggiunto ad un array di Stringhe che raccoglie le scelte dell'utente. mentre quando viene deselezionato viene tolto dall'array. Il problema è che non riesco a distinguere i due casi.

Quando viene chiamato il metodo OnListItemClick(..) vorrei distinguere il caso in cui l'elemento viene SELEZIONATO(e quindi viene spuntato e aggiunto all'array delle scelta) , dal caso in cui l'elemento viene deselezionato(e quindi viene tolta la spunta e viene tolto dall'array).

Dato OnListItemClick(ListView parent, View v, int position, long id)
ho provato i vari v.isSelected(), v.isPressed(), v.isEnable(),.... ma nessuno mi permette di distinguere i due casi...

Vi posto un po di codice per una maggiore comprensione:
Codice (Java): [Seleziona]
package gestInfo.firstApp;

import java.util.ArrayList;

import android.app.ListActivity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.ListView;
import android.widget.Spinner;
import android.widget.TextView;

public class SelectionActivity extends ListActivity implements AdapterView.OnItemSelectedListener,OnClickListener{
       
        TextView categorie_selezionate;
        TextView raggio_selezionato;
       
        String[] items_categorie={"museo","cinema","ristorante","bar","shopping"};
       
        ListView lista;
        ArrayList<String> cat_selezionate;
       
       
        /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.table);
       
        Cerca = (Button) findViewById(R.id.bottoneCerca);
        /* imposto un listener su questo oggetto: resto in ascolto di eventi che possono verificarsi
         * su questo widget */

        Cerca.setOnClickListener(this);
       
       
        categorie_selezionate=(TextView)findViewById(R.id.categorie);
       
       
                /** LISTA SCELTA MULTIPLA **/
                /* settiamo l'adapter ad una visualizzazione
                 *  multiple-choice tramite checkboxes */

                ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
                                android.R.layout.simple_list_item_multiple_choice,
                                items_categorie);
                setListAdapter(adapter);
                lista = getListView();
                // CHOICE_MODE_MULTIPLE = 2
                lista.setChoiceMode(2);
               
    }

 
    /** Gestisce la scelta di un elemento della lista **/
        /** riceve come argomento la posizione dell'elemento scelto rispetto all'array da cui siamo partiti **/
        public void onListItemClick(ListView parent, View v, int position, long id) {
                 
                String cat_già_selezionate = (String)categorie_selezionate.getText();
                String categoria = items_categorie[position];
                if(v.isEnabled()) {// voglio verificare se l'elemento è SELEZIONATO(spuntato)
                       
                        cat_selezionate.add(categoria);
                        categorie_selezionate.setText(categoria+","+cat_già_selezionate);
                }
                       
                else{//se invece l'elemento viene deselezionato(tolta la spunta)
                         //ma per come sono impostate le cose qui
                        // non entra mai, non riesco a rapprsentare
                        //il caso in cui un elemento è DESELEZIONATO
                        cat_selezionate.remove(categoria);
                        //altro codice per visualizzazione
                }
               
               
        }

       

}

Avete dei consigli su come posso risolvere il problema?
Su quale metodo devo chiamare nella OnListItemClick() ed in particolare sulla View v per verificare che sia in fase di SELEZIONE o DESELEZIONE?

Grazie
« Ultima modifica: 07 Maggio 2011, 15:55:43 CEST da pablo86 »

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:verificare selezione/deselezione di oggetti in una ListView a scelta multipla
« Risposta #1 il: 07 Maggio 2011, 15:43:44 CEST »
0
ListView.getItemAtPosition(position).isChecked()
Postate il LogCat LogCat LogCat LogCat LogCat

Offline pablo86

  • Nuovo arrivato
  • *
  • Post: 8
  • Respect: 0
    • Mostra profilo
  • Dispositivo Android:
    AVD: HVGA
  • Sistema operativo:
    Windows XP
Re:verificare selezione/deselezione di oggetti in una ListView a scelta multipla
« Risposta #2 il: 07 Maggio 2011, 16:20:57 CEST »
0
non posso chiamare il metodo isChecked() su parent.getItemAtPosition(position)
Altro modo?

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:verificare selezione/deselezione di oggetti in una ListView a scelta multipla
« Risposta #3 il: 08 Maggio 2011, 14:12:59 CEST »
0
Scusa, errore mio
ListView.isItemChecked(position)
Comunque l'avresti trovato subito con una ricerca nella documentazione ufficiale
AbsListView | Android Developers
Postate il LogCat LogCat LogCat LogCat LogCat