Autore Topic: onLongListItemClick in ListView  (Letto 811 volte)

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
onLongListItemClick in ListView
« il: 17 Maggio 2012, 17:21:01 CEST »
0
Salve ragazzi,
ho realizzato una listView e gestisco correttamente il click con il metodo

Codice (Java): [Seleziona]
protected void onListItemClick(ListView l, View v, int position, long id) {
                super.onListItemClick(l, v, position, id);             
                Object o = this.getListAdapter().getItem(position);            
                Log.i("obj", o.toString());
                }

Adesso mi servirebbe gestire anche il longClick ma non sono riuscito a capire come...
Esiste un metodo simile alla gestione del click? Ho provato con
Codice (Java): [Seleziona]
protected void onLongListItemClick (ListView l, View v, int position, long id) {
                super.onListItemClick(l, v, position, id);             
                Object o = this.getListAdapter().getItem(position);            
                Log.i("long", o.toString());
        }

ma non va..

Consigli??
Grazie..  8-)

Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:onLongListItemClick in ListView
« Risposta #1 il: 17 Maggio 2012, 17:47:43 CEST »
0
Ciao dai uno sguardo qui  http://developer.android.com/guide/topics/ui/menus.html
alla voce "creating contextual menus"

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:onLongListItemClick in ListView
« Risposta #2 il: 18 Maggio 2012, 11:03:12 CEST »
0
Ciao djdedo,
grazie per il link. Sono riuscito a realizzare il contextual menu senza problemi..
Ecco il codice..
Codice (Java): [Seleziona]
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
                super.onCreateContextMenu(menu, v, menuInfo);
                MenuInflater inflater = getMenuInflater();
                inflater.inflate(R.menu.long_menu, menu);
        }
        @Override
        public boolean onContextItemSelected (MenuItem item) {         
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
                               
                switch (item.getItemId()) {
                case R.id.menu_edit:                   
                        Log.i("menu", "edit");
                        break;
               
                case R.id.menu_cancel:                 
                        Log.i("menu", "cancel");
                        break;
                       
                default:
                        return super.onContextItemSelected(item);
                }
                return true;
        }

Il problema che ho adesso è che ora devo capire quale item è stato cliccato e non riesco a recuperarlo..
Vi premetto che i dati vengono da un DB e non da un file XML..
idee??


Offline djdedo

  • Utente normale
  • ***
  • Post: 209
  • Respect: +15
    • Mostra profilo
  • Dispositivo Android:
    Galaxy S2
Re:onLongListItemClick in ListView
« Risposta #3 il: 18 Maggio 2012, 11:10:30 CEST »
+1
Utilizzando il tuo codice che hai scritto nell'onLongListItemClick lo recuperi così
Codice (Java): [Seleziona]
Object o = NomeClasse.this.getListAdapter().getItem(info.position);

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:onLongListItemClick in ListView
« Risposta #4 il: 18 Maggio 2012, 11:28:06 CEST »
0
Perfetto!!
Grazie x l'aiuto!!
Vi posto tutto il codice cosi lo potete riutilizzare..
Codice (Java): [Seleziona]
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo){
                super.onCreateContextMenu(menu, v, menuInfo);
                MenuInflater inflater = getMenuInflater();
                inflater.inflate(R.menu.long_menu, menu);
        }
        @Override
        public boolean onContextItemSelected (MenuItem item) {         
                AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
               
                Object o = this.getListAdapter().getItem(info.position);
                String[] str = o.toString().split(",");
               
                int itemSel = Integer.parseInt(str[1].substring(str[1].indexOf("=")+1, str[1].length()));
                Log.i("idSel", Integer.toString(itemSel));
               
                switch (item.getItemId()) {
                case R.id.menu_edit:                   
                        Log.i("menu", "edit");
                        break;
               
                case R.id.menu_cancel:                 
                        Log.i("menu", "cancel");
                        break;
                       
                default:
                        return super.onContextItemSelected(item);
                }
                return true;
        }

Solo un piccolo commento su questa parte di  codice, molto semplice
Codice (Java): [Seleziona]
Object o = this.getListAdapter().getItem(info.position);
                String[] str = o.toString().split(",");
               
                int itemSel = Integer.parseInt(str[1].substring(str[1].indexOf("=")+1, str[1].length()));
                Log.i("idSel", Integer.toString(itemSel));

L'Object o restituisce un stringa simile al formato json, in cui i vari attributi contenuti nell'item sono separati da ",". Nel mio caso l'attributo id si trova nella posizione 1 dell'array str e si presenta nella forma id=.... quindi per prelevare il valore mi cerco il carattere "=" e faccio il parse ad Int del resto..
 8-)

Grazie ancora...

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:onLongListItemClick in ListView
« Risposta #5 il: 18 Maggio 2012, 15:58:57 CEST »
0
L'Object o restituisce un stringa simile al formato json, in cui i vari attributi contenuti nell'item sono separati da ",". Nel mio caso l'attributo id si trova nella posizione 1 dell'array str e si presenta nella forma id=.... quindi per prelevare il valore mi cerco il carattere "=" e faccio il parse ad Int del resto..
 8-)

Grazie ancora...

Object o non restituisce nulla, è una referenza ad un oggetto :)
Comunque l'oggetto in questione è un oggetto che TU hai definito nella lista, la quale hai settato alla creazione di quest'ultima. Se la lista era di stringhe, la tua o è una stringa. Se nella lista avresti messo oggetti Integer, la tua o sarebbe stata un Integer.

Offline salvatore.zagarella

  • Utente normale
  • ***
  • Post: 239
  • Respect: +2
    • Mostra profilo
    • Ieeng Solution
Re:onLongListItemClick in ListView
« Risposta #6 il: 18 Maggio 2012, 16:01:15 CEST »
0
Si ragazzi...
scusate..

P.S. Occhio ai congiuntivi..  :-P

Offline emaborsa

  • Utente normale
  • ***
  • Post: 274
  • Java Developer
  • Respect: +33
    • Google+
    • emaborsa
    • Mostra profilo
    • www.emaborsa.com
  • Dispositivo Android:
    Samsung Galaxy S2
  • Sistema operativo:
    Linux 10 - Win8.1 - Android 4.1.2
Re:onLongListItemClick in ListView
« Risposta #7 il: 18 Maggio 2012, 16:03:27 CEST »
0
......vorrei aggiungere un mio consiglio; modo pulito per fare il tutto:

dichiarare nella Activity con la lista una variabile privata, per esempio:

Codice (Java): [Seleziona]
private Vector<String> lista;
poi nel onCreate quando create la lista la inizializzate e la settate all'adapter. Infine quando avete la posizione, basta che fate:

Codice (Java): [Seleziona]
String stringa = lista.get(info.position);