Autore Topic: ProgressDialog: non ci sto capendo nulla...  (Letto 981 volte)

Offline zipgenius

  • Utente junior
  • **
  • Post: 80
  • Respect: +17
    • matteoriso
    • Mostra profilo
    • ZipGenius
  • Dispositivo Android:
    Samsung Galaxy S
  • Play Store ID:
    Wininizio.it Software
  • Sistema operativo:
    Windows 7
ProgressDialog: non ci sto capendo nulla...
« il: 24 Agosto 2010, 17:22:14 CEST »
0
Ciao.
Lo sviluppo della mia prima applicazione per Android procede a discreta velocità ma ancora ho gorsse difficoltà nella realizzazione di cose che altri ambienti di sviluppo rendono estremamente semplici.
Nello specifico, non riesco a creare un ProgressDialog che venga aggiornato durante l'esecuzione di una funzione.
Ho la seguente funzione:
Codice (Java): [Seleziona]
public int processfile(File source, int PartSize, String destpath) throws IOException {

[... esegue alcune operazioni sui files ...]

    }
Questa viene richiamata alla pressione di una tasto (quindi dall'evento onClick). A questo punto vorrei che la mia applicazione mostrasse una ProgressBar (o un ProgressDialog), impostasse la proprietà "Max" di questa al numero di files da processare e ne incrementasse la proprietà "Progress" di 1 ogni volta che termina di processare un file. Come posso fare?

Con Delphi: 3 righe di codice.
Con Android: 3 testate al muro :)

Aiuto, sono disperato!

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:ProgressDialog: non ci sto capendo nulla...
« Risposta #1 il: 24 Agosto 2010, 18:03:53 CEST »
0
Ho usato la progress dialog nella micro-applicazione che ho descritto proprio oggi (HttpBookSearch, applicazione didattica - Android Developers Italia). Se leggi il source, che è molto breve, potrebbe esserti di aiuto.

Comunque in pseudo-codice è qualcosa del genere:

Codice (Java): [Seleziona]
pd = ProcessDialog.show(...);
for (i=0;i<numero;i++) {
   processa_file(i);
   pd.setMessage("file "+i+"/"+numero);
}
pd.dismiss();

Con l'avvertenza che dovendo eseguire le elaborazioni (quelle nel ciclo for) in un AsyncTask, dovrai usare publishprogress e spostare pd.setMessage nell'update dell'AsyncTask (lo vedi in dettaglio nel thread che ti ho linkato).

Per quanto riguarda la difficoltà del passare da Delphi a Android in realtà la difficoltà oggettiva è comprendere come è impostato il sistema operativo Android, più che il tool di sviluppo. La differenza fondamentale che all'inizio mi ha un po' spiazzato è che mentre in ambito dekstop è il processing a fare da padrone e la UI viene in secondo piano, su Android è il contrario: la UI comanda e il processing si accoda.
NON rispondo a domande nei messaggi privati
Bradipao @ Play Store

Offline zipgenius

  • Utente junior
  • **
  • Post: 80
  • Respect: +17
    • matteoriso
    • Mostra profilo
    • ZipGenius
  • Dispositivo Android:
    Samsung Galaxy S
  • Play Store ID:
    Wininizio.it Software
  • Sistema operativo:
    Windows 7
Re:ProgressDialog: non ci sto capendo nulla...
« Risposta #2 il: 25 Agosto 2010, 01:24:37 CEST »
0
Grazie mille per la dritta! :) Il tuo codice mi è stato utilissimo e l'ho usato per creare un ProgressDialog con progressbar :)

Offline The_Jag

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
    • Il Blog per le mie applicazioni Android
  • Dispositivo Android:
    Motorola Milestone
  • Play Store ID:
    Fabio Canovi
  • Sistema operativo:
    Ubuntu 10.10
Re:ProgressDialog: non ci sto capendo nulla...
« Risposta #3 il: 11 Ottobre 2010, 22:31:56 CEST »
0
Io invece ho un problema: se ruoto il device ovviamente la activity viene ricreata e il progress dialog scompare, c'è un modo per mantenerlo visualizzato e attivo agli aggiornamenti?
Il Blog per le mie applicazioni Android: http://android.canovifabio.com

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:ProgressDialog: non ci sto capendo nulla...
« Risposta #4 il: 11 Ottobre 2010, 22:58:25 CEST »
0
Io invece ho un problema: se ruoto il device ovviamente la activity viene ricreata e il progress dialog scompare, c'è un modo per mantenerlo visualizzato e attivo agli aggiornamenti?

per problemi riguardanti la rotazione del dispositivo, ti consiglio di dare un occhiata a questa guida: [medio] Rotazione dello schermo e onCreate: problema e soluzioni - Android Developers Italia
chiaramente non è vangelo, ma può aiutarti ;D

Offline The_Jag

  • Nuovo arrivato
  • *
  • Post: 9
  • Respect: 0
    • Mostra profilo
    • Il Blog per le mie applicazioni Android
  • Dispositivo Android:
    Motorola Milestone
  • Play Store ID:
    Fabio Canovi
  • Sistema operativo:
    Ubuntu 10.10
Re:ProgressDialog: non ci sto capendo nulla...
« Risposta #5 il: 11 Ottobre 2010, 23:11:43 CEST »
0
Avevo già guardato ma non è inerente a ciò che cercavo purtroppo :(
Il Blog per le mie applicazioni Android: http://android.canovifabio.com

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:ProgressDialog: non ci sto capendo nulla...
« Risposta #6 il: 11 Ottobre 2010, 23:26:44 CEST »
0
Io invece ho un problema: se ruoto il device ovviamente la activity viene ricreata e il progress dialog scompare, c'è un modo per mantenerlo visualizzato e attivo agli aggiornamenti?

ok allora, il mio consiglio è di usare un asynctask per la gestione degli aggiornamenti e della visibilità/invisibilità della progressdialog.

poi nel oncreate, verifichi se l'asynctask è running, se si, allora ri-rendi visibile la progress; in questo caso, l'async task continua ad aggiornare la progress da dove era rimasto.