Onbepaalde ProgressDialog-zelfstudie voor Android

In mijn droomwereld hoeft een gebruiker nooit op een toepassing te wachten om gegevens van een server op te halen. Helaas, terwijl de digitale pijpleidingen die de nieuwste en beste mobiele apps voeden zich blijven verbreden, hebben we het punt van onmiddellijke gegevens niet helemaal bereikt.

Als het gaat om het schrijven van mobiele applicaties, zijn er een aantal trucs om de gebruiker te beschermen tegen veel van het saaie gekraak dat op de achtergrond plaatsvindt. Er zijn nog steeds momenten waarop de betere gebruikerservaring (UX) is om een ​​"even geduld" dialoogvenster weer te geven, in plaats van de gebruiker zijn hoofd te laten krabben en zich af te vragen wat er aan de hand is.

Gelukkig heeft het Android-framework een aantal ingebouwde klassen om deze situaties aan te kunnen. Een dergelijke klasse is de ProgressDialog. In het volgende voorbeeld worden een dialoogvenster en een spinner weergegeven terwijl er wat achtergrondwerk doorgaat. Zoals gebruikelijk is op het Android-platform, moet al het achtergrondwerk van de gebruikersinterface (UI) worden verwijderd. Dit wordt meestal bereikt met de AsyncTask-klasse.

Volg de stapsgewijze zelfstudie hieronder of download en importeer het hele project in Eclipse.

1. Maak een nieuw Android-project in Eclipse. Target Android 1.6 of hoger. Vergeet niet de opstartactiviteit te hernoemen naar Main.java en de bijbehorende lay-out naar main.xml.

2. Maak in de map / res een lineaire lay-out met een enkel tekstveld en één knop.

 main.xml 
 "Http://schemas.android.com/apk/res/android" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientatie = "verticaal" 
 android: gravity = "center" > 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: textSize = "20sp" 
 android: textColor = "# 0000ff" 
 android: paddingBottom = "20dip" 
 android: text = "Demo van voortgangsdialoog" /> 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Achtergrondverwerking uitvoeren" 
 android: id = "@ + id / the_button" /> 

3. Wijzig Main.java in de map / src. In de on create override, wijs de activiteitscontext toe en sluit onze knoplistener aan.

 pakket com.authorwjf.progressdialog; import com.wjf.progressdialog.R; android.os.AsyncTask importeren; android.os.bundle importeren; android.app.Activity importeren; android.app.ProgressDialog importeren; android.content.Context importeren; android.view.View importeren; android.view.View.OnClickListener importeren; android.widget.Button importeren; public class Main breidt activiteit uit OnClickListener {private context context; privé ProgressDialog pd; privéknop b; @Override public void onCreate (Bundle saveInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.main); context = dit; b = (knop) findViewById (R.id.the_button); b.setOnClickListener (deze); } @Override beschermd void onDestroy () {if (pd! = Null) {pd.dismiss (); b.setEnabled (true); } super.onDestroy (); }} 

4. De handler bij klikken is verantwoordelijk voor het uitschakelen van de knop en vervolgens een nieuwe AsyncTask uitzetten die het achtergrondwerk afhandelt. Bij de methoden voor en na de uitvoering maken we ons zorgen over de ProgressDialog en het opnieuw inschakelen van de knop.

 @Override public void onClick (View v) {v.setEnabled (false); AsyncTask task = new AsyncTask () {@Override beschermd void onPreExecute () {pd = new ProgressDialog (context); pd.setTitle ( "Processing ..."); pd.setMessage ("Even geduld."); pd.setCancelable (false); pd.setIndeterminate (true); pd.show (); } @Override beschermde Void doInBackground (Void ... arg0) {probeer {// Doe iets ... Thread.sleep (5000); } catch (InterruptedException e) {// TODO Automatisch gegenereerd vangstblok e.printStackTrace (); } retour null; } @Override beveiligde nietig op onPostExecute (ongeldig resultaat) {if (pd! = Null) {pd.dismiss (); b.setEnabled (true); }}}; task.execute ((Void ) null); } 

Nu is onze demo klaar om te worden uitgevoerd. Voordat u het op een apparaat laadt, moet u de methode onPreExecute van de AsyncTask nader bekijken. Merk op hoe we een aantal eigenschappen instellen op de ProgressDialog? De titel- en berichteigenschappen zijn redelijk zelfverklarend, maar u bent misschien nieuwsgierig naar de te annuleren en onbepaalde eigenschappen. De eerste eigenschap geeft aan of de gebruiker het dialoogvenster kan annuleren door er buiten te tikken. De tweede eigenschap vertelt het dialoogvenster of een spinner moet worden weergegeven. Als deze fout is, bevat de ProgressDialog een echte voortgangsbalk en moet u de gebruikersinterface periodiek bijwerken met het huidige voltooiingspercentage van uw achtergrondtaak.

Onbepaalde voortgangsdialogen mogen nooit uw eerste UX-keuze zijn. Maar wees niet bang om ze te gebruiken wanneer het alternatief is om de gebruiker te laten afvragen of uw applicatie een hartstilstand heeft gehad.

Opmerking: deze zelfstudie is gericht op het voortgangsvenster en negeert als zodanig wat er gebeurt met de langlopende I / O zelf wanneer een oriëntatie plaatsvindt. Ik heb nog een tutorial geschreven over langlopende I / O die ingaat op het doorgeven van asynchrone taken tussen levenscyclusevents.

© Copyright 2020 | mobilegn.com