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

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
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)
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

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: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.
Postate il LogCat LogCat LogCat LogCat LogCat

Offline Qlimax

  • Moderatore globale
  • Utente senior
  • *****
  • Post: 757
  • Respect: +203
    • Google+
    • _Qlimax
    • Mostra profilo
    • www.egsolutions.ch
  • Dispositivo Android:
    Galaxy Nexus - Nexus One - Wildfire - Magic
  • Play Store ID:
    egsolutions.ch
  • Sistema operativo:
    Ubuntu 12.04, 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

Offline bradipao

  • Moderatore globale
  • Utente storico
  • *****
  • Post: 4043
  • keep it simple
  • Respect: +567
    • Github
    • Google+
    • bradipao
    • Mostra profilo
  • Dispositivo Android:
    Nexus 5
  • Play Store ID:
    Bradipao
  • Sistema operativo:
    W7
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 »
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

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: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 ;)
Postate il LogCat LogCat LogCat LogCat LogCat

Offline cadupper

  • Utente junior
  • **
  • Post: 81
  • Respect: 0
    • cadupper
    • Mostra profilo
  • Dispositivo Android:
    HTC Magic Tim (32A)
  • Play Store ID:
    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)