Autore Topic: Dialog tra due intent?  (Letto 635 volte)

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Dialog tra due intent?
« il: 10 Settembre 2011, 23:13:35 CEST »
0
Ciao a tutti, ho un problema con l'uso delle progressbar :D
Premettendo che anche seguendo il tutorial non riesco ad usarle (ma il problema non riguarda questo, una ricerca con google e risolto), per ora sto facendo le probe con semplici Dialog:
Codice: [Seleziona]
                AlertDialog.Builder builder = new AlertDialog.Builder( getApplicationContext() );
                builder.setTitle("Avviso");
                builder.setMessage("LOADING...");
                builder.setCancelable(false);
                builder.show();

Cio' che dovrei fare e':
tramite un bottone, faccio partire una nuova activity in cui compio alcune operazioni, tra cui istanzio un oggetto Object1 (new Object1()) che verifica se e' presente una connessione ad internet e, in caso in cui non sia presente (negli appositi catch), imposto una variabile flag a false.
Questa variabile flag sara' poi letta a ciclo per caricare da internet una serie di immagini dalla funzione loadImg().

Il problema e' che non riesco a far si che rimanga il dialog LOADING da quando premo il bottone a quando si carica completamente l'activity successiva.
Succede infatti che ora, posizionando l'apertura del dialog al click del bottone (prima di startactivity()), il dialog rimane per un po'...poi la schermata rimane nera per un altro po' e dopo di che si carica tutta la pagina con le foto "di risera" (la funzione loadImg() se e' settata su false l'ho costruita in modo tale che legga un'immagine presente di @drawable.

Come mi suggerite di agire?

Grazie in anticipo :)

Offline Ricky`

  • Amministratore
  • Utente storico
  • *****
  • Post: 3489
  • Respect: +507
    • Github
    • Google+
    • rciovati
    • Mostra profilo
Re:Dialog tra due intent?
« Risposta #1 il: 11 Settembre 2011, 00:34:46 CEST »
0
Se il dialog lo apri nell'activity1 quando fai lo startActivity dell'activity2 quest'ultimo viene chiuso. Anzi, dovresti chiuderlo tu stesso nell'onStop altrimenti credo che ti ritrovi nel logcat qualche errore.
Detto questo secondo me dovresti far partire il progress dialog nell'activity1 e far partire già la tua operazione (ovviamente in un thread apposito) e quando hai finito chiudi il progress dialog e apri l'activity2 passandogli i dati :)

Offline teskio

  • Moderatore globale
  • Utente normale
  • *****
  • Post: 387
  • Respect: +118
    • Github
    • Google+
    • Mostra profilo
    • Skullab
  • Dispositivo Android:
    Cubot GT99 / SurfTab Ventos 10.1
  • Play Store ID:
    Skullab Software
  • Sistema operativo:
    windows 7 / ubuntu 12.04
Re:Dialog tra due intent?
« Risposta #2 il: 11 Settembre 2011, 09:55:18 CEST »
0
Citazione da: Melanogaster
...il dialog rimane per un po'...poi la schermata rimane nera per un altro po' e dopo di che si carica tutta la pagina con le foto "di risera"...

E' normale, poichè il dialog viene creato dalla Activity1, poi successivamente viene eseguita l'Activity2 che viene a "sovrapporsi" sullo stack, la schermata nera indica che l'Activity si sta caricando (onCreate -> onStart) e infine vedi tutte le foto (onStart -> onResume). Dovresti implementare il dialog nella seconda Activity (quella con le foto) e far caricare le foto in un Thread separato, ad esempio usando un AsyncTask. Al completamento del Thread chiudi il dialog.

Offline ROS

  • Utente normale
  • ***
  • Post: 196
  • Respect: +5
    • Mostra profilo
  • Sistema operativo:
    Ubuntu 10.04
Re:Dialog tra due intent?
« Risposta #3 il: 11 Settembre 2011, 22:59:26 CEST »
0
E' normale, poichè il dialog viene creato dalla Activity1, poi successivamente viene eseguita l'Activity2 che viene a "sovrapporsi" sullo stack, la schermata nera indica che l'Activity si sta caricando (onCreate -> onStart) e infine vedi tutte le foto (onStart -> onResume). Dovresti implementare il dialog nella seconda Activity (quella con le foto) e far caricare le foto in un Thread separato, ad esempio usando un AsyncTask. Al completamento del Thread chiudi il dialog.
Grazie per la dritta, ed infatti poco prima che lo scrivessi ero arrivato a questa soluzione, purtroppo unica, anche se leggendo alcuni tutorial mi rimane un dubbio: se io istanzio un oggetto in runOnBackground(), dopo come posso utilizzarlo al di fuori della classe che estende AsyncTask (syncTask) (sub classe di una piu' grande)?

Per ora mi sto arrangiando dichiarando l'oggetto nella classe principale e nella classe syncTask lo richiamo e lo istanzio con
Codice: [Seleziona]
NomeClassePrincipale.nomeOggetto = new Oggetto();
Cosi' posso usarlo anche nella classe principale una volta istanziato con syncTask...purtroppo non ho trovato nessun'altra alternativa pulita :(