Autore Topic: AlertDialog di conferma cancellazione  (Letto 311 volte)

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1187
  • keep it simple
  • Respect: +218
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Tattoo / Galaxy S
  • Market Developer Name:
    Bradipao
  • Sistema operativo:
    Windows XP
AlertDialog di conferma cancellazione
« il: 26 Giugno 2010, 20:20:42 CEST »
0
Sto cercando di aggiungere funzioni all'applicazione tutorial della ListView con SimpleAdapter. In particolare vorrei che facendo LongClick di un Item apparisse una AlertDialog che chiede conferma della cancellazione dell'Item.

Il problema che ho riscontrato è che le AlertDialog pur essendo modali non bloccano l'Activity da cui sono generate (contrariamente a quelle tipicamente usate in ambito desktop PC). Non hanno infatti nessun valore boolean restituito, per cui non sono come collegare la conferma della cancellazione all'esecuzione della cancellazione stessa.

Qual'è il miglior modo per implementare qualcosa di analogo?

(non vorrei implementare la cancellazione all'interno della AlertDialog)
Partecipa anche tu all'iniziativa per salvare logCAT, felino in via di estinzione della razza Dalvik : CLICCA QUA

Offline blackgin

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 942
  • Respect: +100
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
    • CommaBit
  • Dispositivo Android:
    Galaxy Nexus
  • Market Developer Name:
    CommaBit
  • Sistema operativo:
    Mac OSX
Re:AlertDialog di conferma cancellazione
« Risposta #1 il: 26 Giugno 2010, 20:42:52 CEST »
0
Non vuoi implementare il delete all'interno del Dialog in che senso?
Basterebbe che il metodo delete rimanesse fuori e poi lo chiami dentro il dialog.
Fate i bravi bimbi, postatelo il LogCat

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 719
  • Respect: +169
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Nexus One - Wildfire - Magic
  • Market Developer Name:
    egsolutions
  • Sistema operativo:
    Ubuntu 10.10, Windows 7
Re:AlertDialog di conferma cancellazione
« Risposta #2 il: 26 Giugno 2010, 20:45:01 CEST »
0
che ne dici invece di un context menu?
Creating Menus | Android Developers
Why?

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 1187
  • keep it simple
  • Respect: +218
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Tattoo / Galaxy S
  • Market Developer Name:
    Bradipao
  • Sistema operativo:
    Windows XP
Re:AlertDialog di conferma cancellazione
« Risposta #3 il: 27 Giugno 2010, 10:11:12 CEST »
0
Non vuoi implementare il delete all'interno del Dialog in che senso?
Basterebbe che il metodo delete rimanesse fuori e poi lo chiami dentro il dialog.

Mah, mi ero fatto l'idea che la AlertDialog dovesse darmi solo una risposta vero-o-falso, mentre se ci metto dentro anche solo la chiamata al metodo, finisce per diventare parte importante dell'applicazione. Comunque quasi certamente è una mia fissazione basata su preconcetti, devo ancora assimilare questa piattaforma.

che ne dici invece di un context menu?
Creating Menus | Android Developers

Effettivamente il context menu pare lo strumento più adatto... ora vado ad imparare come si usa :-[ e poi aggiorno. Grazie a tutti per ora.

EDIT

Ho implementato il ContextMenu, effettivamente fa proprio quello che mi serve ed in prospettiva anche quello che mi servirà. Per memoria storica riporto il codice che ho aggiunto.

Registro la ListView per il ContextMenu
Codice (Java): [Seleziona]
registerForContextMenu(findViewById(R.id.taskListView));
Override di onCreateContextMenu
Codice (Java): [Seleziona]
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
   super.onCreateContextMenu(menu,v,menuInfo);
   menu.add(0,CANCEL_ID,0,"Cancel");
   menu.add(0,EDIT_ID,0,"Edit");
   menu.add(0,DELETE_ID,0,"Delete");
}

Override di onContextItemSelected
Codice (Java): [Seleziona]
@Override
public boolean onContextItemSelected(MenuItem item) {
   AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
   switch (item.getItemId()) {
   case CANCEL_ID:
      return true;
   case EDIT_ID:
      Toast.makeText(getApplicationContext(),"info.position="+info.position,Toast.LENGTH_SHORT).show();
      return true;
   case DELETE_ID:
      data.remove(info.position);
      adapter.notifyDataSetChanged();
      return true;
   default:
      return super.onContextItemSelected(item);
   }
}
« Ultima modifica: 27 Giugno 2010, 11:21:51 CEST da bradipao, Reason: Aggiornamento »
Partecipa anche tu all'iniziativa per salvare logCAT, felino in via di estinzione della razza Dalvik : CLICCA QUA

Offline blackgin

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 942
  • Respect: +100
    • Google+
    • blackgins
    • blackginsoft
    • Mostra profilo
    • CommaBit
  • Dispositivo Android:
    Galaxy Nexus
  • Market Developer Name:
    CommaBit
  • Sistema operativo:
    Mac OSX
Re:AlertDialog di conferma cancellazione
« Risposta #4 il: 27 Giugno 2010, 18:11:38 CEST »
0
Alla fine però hai sempre messo il metodo nel context.. Di fatti era la soluzione piú comoda ;)
Fate i bravi bimbi, postatelo il LogCat

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Market Developer Name:
    cadupper
  • Sistema operativo:
    Ubuntu 10.04
Re:AlertDialog di conferma cancellazione
« Risposta #5 il: 21 Maggio 2011, 18:20:12 CEST »
0
Mah, mi ero fatto l'idea che la AlertDialog dovesse darmi solo una risposta vero-o-falso, mentre se ci metto dentro anche solo la chiamata al metodo, finisce per diventare parte importante dell'applicazione. Comunque quasi certamente è una mia fissazione basata su preconcetti, devo ancora assimilare questa piattaforma.

Effettivamente il context menu pare lo strumento più adatto... ora vado ad imparare come si usa :-[ e poi aggiorno. Grazie a tutti per ora.

EDIT

Ho implementato il ContextMenu, effettivamente fa proprio quello che mi serve ed in prospettiva anche quello che mi servirà. Per memoria storica riporto il codice che ho aggiunto.

Registro la ListView per il ContextMenu
Codice (Java): [Seleziona]
registerForContextMenu(findViewById(R.id.taskListView));
Override di onCreateContextMenu
Codice (Java): [Seleziona]
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
   super.onCreateContextMenu(menu,v,menuInfo);
   menu.add(0,CANCEL_ID,0,"Cancel");
   menu.add(0,EDIT_ID,0,"Edit");
   menu.add(0,DELETE_ID,0,"Delete");
}

Override di onContextItemSelected
Codice (Java): [Seleziona]
@Override
public boolean onContextItemSelected(MenuItem item) {
   AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
   switch (item.getItemId()) {
   case CANCEL_ID:
      return true;
   case EDIT_ID:
      Toast.makeText(getApplicationContext(),"info.position="+info.position,Toast.LENGTH_SHORT).show();
      return true;
   case DELETE_ID:
      data.remove(info.position);
      adapter.notifyDataSetChanged();
      return true;
   default:
      return super.onContextItemSelected(item);
   }
}

Anche io ho usato questo codice per il mio menu... solo una cosa.. Come mai la mia ListView non si aggiorna? Ho dato adapter.notifyDataSetChanged()!!!

Inoltre da come è scritto il codice, info.position() mi va a prendere la posizione all'interno della ListView (che partono da 0) mentre la mia LV è associata a un database con indici che partono da 1.
Non basta fare info.position()+1 perchè se in futuro magari voglio visualizzare gli elementi in ordine alfabetico mi sballa tutto!
Come faccio a recuperare l'id del database? (un po come è possibile con il metodo del click singolo su un elemento):  id
Codice (Java): [Seleziona]
public void onItemClick(AdapterView<?> parent, View view,
                                        int position, long id)