2010-02-08 16 views
18

Ho una semplice applicazione, inizia, carica xml feed dalla rete, puoi sfogliare una lista di notizie e poi leggere i dettagli per una notizia scelta. Quello che mi piacerebbe fare è avere una schermata iniziale, nel senso che non appena si fa clic sull'applicazione, dovrebbe visualizzare un'immagine (nome app nel mio caso) e quindi visualizzare l'elenco delle notizie solo dopo che sono state caricate.Come creare una schermata iniziale (schermo visibile all'avvio dell'app)?

Ho letto di problemi simili (penso), e in genere la gente dice di usare FrameLayout, ma non riesco a risolverlo. Non sono sicuro che ciò possa essere fatto nella prima attività lanciata, forse dovrei semplicemente visualizzare questa immagine in una sola attività e solo dopo chiamare l'attività che mostra la mia lista di notizie?

So che su iPhone è possibile impostare lo splash screen in impostazioni app durante lo sviluppo, sarebbe bello avere questa funzionalità in palese di app di Android ...

+4

Sapete che una schermata iniziale non aiuta a nulla ma rende la vostra app ancora più lenta ... per favore non usateli. – Johan

+0

Credo che i suoi svantaggi superino pesantemente tutti i benefici che si otterrebbero da una schermata iniziale. –

+21

Non vedo alcun svantaggio, invece di guardare uno schermo nero per 2 o 3 secondi (o più lungo), stai guardando un'immagine, molto più bella secondo me, almeno sai che l'app è iniziata. – pambuk

risposta

35

Android suggerisce di prendere vantaggio di utilizzare uno splash screen durante l'esecuzione calcoli lunghi all'avvio. Ecco un estratto dal sito web per sviluppatori Android - Designing for Responsiveness:

"Se l'applicazione ha una fase di installazione iniziale che richiede molto tempo, considera la visualizzazione di una schermata iniziale o il rendering della vista principale il più rapidamente possibile e riempiendo le informazioni in modo asincrono In entrambi i casi, dovresti indicare in qualche modo che sono stati compiuti dei progressi, per evitare che l'utente percepisca che l'applicazione è congelata. " - Sito per sviluppatori Android

È possibile creare un'attività che mostra una finestra di dialogo di avanzamento mentre si utilizza un AsyncTask per scaricare il feed xml dalla rete, analizzarlo, memorizzarlo in un db (se necessario) e quindi avviare l'attività che visualizza i feed di notizie. Chiudere il tonfo attività chiamando finitura()

Ecco un codice di scheletro:


public class SplashScreen extends Activity{ 
    @Override 
    public void onCreate(Bundle savedInstanceState){ 
     super.onCreate(savedInstanceState); 
     // set the content view for your splash screen you defined in an xml file 
     setContentView(R.layout.splashscreen); 

     // perform other stuff you need to do 

     // execute your xml news feed loader 
     new AsyncLoadXMLFeed().execute(); 

    } 

    private class AsyncLoadXMLFeed extends AsyncTask<Void, Void, Void>{ 
     @Override 
     protected void onPreExecute(){ 
      // show your progress dialog 

     } 

     @Override 
     protected Void doInBackground(Void... voids){ 
      // load your xml feed asynchronously 
     } 

     @Override 
     protected void onPostExecute(Void params){ 
      // dismiss your dialog 
      // launch your News activity 
      Intent intent = new Intent(SplashScreen.this, News.class); 
      startActivity(intent); 

      // close this activity 
      finish(); 
     } 

    } 
} 

speranza che aiuta!

+1

Problema risolto, grazie :) – pambuk

+1

Ultimate :) grazie – Naruto

+0

Ciao, cosa succede se ho più feed e vorrei iniziare il caricamento del secondo feed DOPO che il primo feed viene completato e visualizzato nella prima attività. Come faccio i thread simultanei in questo esempio? – Zac

1

So che questo è vecchio ma per quelli di voi che stanno ancora affrontando questo problema, è possibile utilizzare questo semplice android-splash library per mostrare la schermata iniziale.

SplashBuilder 
     .with(this, savedInstanceState) 
     .show(); 

È possibile impostare SplashTask che eseguirà mentre è visualizzata la schermata iniziale.

Problemi correlati