Android's ubestemmelige opplæring om ProgressDialog

I min drømmeverden vil en bruker aldri måtte vente på et program for å hente data fra en server. Dessverre, mens de digitale rørledningene som mater de nyeste og beste mobilappene fortsetter å utvide, har vi ikke helt nådd poenget med øyeblikkelig data.

Når det gjelder skriving av mobilapplikasjoner, er det en rekke triks for å beskytte brukeren mot mye av den kjedelige knasingen som skjer i bakgrunnen. Det er fremdeles tider hvor den bedre brukeropplevelsen (UX) er å vise en "vennligst vent" -dialog, i stedet for å la brukeren klø seg i hodet og lurer på hva som skjer.

Heldigvis har Android-rammeverket en rekke innebygde klasser for å håndtere disse situasjonene. En slik klasse er ProgressDialog. Eksemplet som følger viser en dialog og spinner mens noe bakgrunnsarbeid pågår. Som vanlig praksis på Android-plattformen, må ethvert bakgrunnsarbeid flyttes av brukergrensesnitttråden (UI). Dette oppnås generelt med AsyncTask-klassen.

Følg gjerne med trinn-for-trinn-opplæringen nedenfor, eller last ned og importer hele prosjektet til Eclipse.

1. Lag et nytt Android-prosjekt i Eclipse. Målrette Android 1.6 eller nyere. Sørg for å gi nytt navn til oppstartsaktiviteten til Main.java og den tilhørende utformingen til main.xml.

2. I mappen / res, oppretter du en lineær layout som inneholder et enkelt tekstfelt og en knapp.

 main.xml 
 "Http://schemas.android.com/apk/res/android" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientering = "vertikal" 
 android: gravitasjon = "sentrum" > 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: textSize = "20sp" 
 android: textColor = "# 0000ff" 
 android: paddingBottom = "20dip" 
 android: text = "Progress Dialog Demo" /> 
 android: layout_width = "wrap_content" 
 android: layout_height = "wrap_content" 
 android: text = "Gjør bakgrunnsbehandling" 
 android: id = "@ + id / the_button" /> 

3. Endre Main.java i mappen / src. I on create overstyring, tilordne aktivitetskonteksten og tråd opp knapplytteren vår.

 pakke com.authorwjf.progressdialog; import com.wjf.progressdialog.R; import android.os.AsyncTask; import android.os.Bundle; import android.app.Aktivitet; import android.app.ProgressDialog; import android.content.Context; import android.view.View; import android.view.View.OnClickListener; import android.widget.Button; public class Main utvider Aktivitets implementeringer OnClickListener {privat kontekstkontekst; privat ProgressDialog pd; privat knapp b; @Override offentlig tomrom onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.main); kontekst = dette; b = (Knapp) findViewById (R.id.the_button); b.setOnClickListener (this); } @Override beskyttet tomrom onDestroy () {if (pd! = Null) {pd.dismiss (); b.setEnabled (true); } super.onDestroy (); }} 

4. Behandleren på klikkvisningen er ansvarlig for å deaktivere knappen og deretter gyte en ny AsyncTask som vil håndtere bakgrunnsarbeidet. I kjøremetodene før og etter, bekymrer vi oss for ProgressDialog og aktiverer knappen igjen.

 @Override offentlig tomrom onClick (Vis v) {v.setEnabled (falsk); AsyncTask oppgave = ny AsyncTask () {@Override beskyttet tomrom onPreExecute () {pd = new ProgressDialog (kontekst); pd.setTitle ( "Behandler ..."); pd.setMessage ("Vennligst vent."); pd.setCancelable (false); pd.setIndeterminate (true); pd.show (); } @Override-beskyttet Void doInBackground (Void ... arg0) {prøv {// Gjør noe ... Tråd.søvn (5000); } fangst (InterruptException e) {// TODO Auto-generert fangstblokk e.printStackTrace (); } return null; } @Override beskyttet tomrom onPostExecute (Void-resultat) {if (pd! = Null) {pd.dismiss (); b.setEnabled (true); }}}; task.execute ((void ), null); } 

Nå er demoen vår klar til å kjøres. Før du legger den på en enhet, bør du se nærmere på onPreExecute-metoden i AsyncTask. Legg merke til hvordan vi setter opp et antall egenskaper på ProgressDialog? Tittel- og meldingsegenskapene er ganske selvforklarende, men du kan være nysgjerrig på de kansellerbare og ubestemmelige egenskapene. Den første egenskapen spesifiserer om brukeren kan avbryte dialogen ved å banke utenfor den. Den andre egenskapen forteller dialogen om en spinner skal vises. Hvis det er usant, vil ProgressDialog inneholde en ekte fremdriftslinje, og du må oppdatere brukergrensesnittet med jevne mellomrom med gjeldende fullføringsprosent av bakgrunnsoppgaven din.

Ubestemte fremdriftsdialoger skal aldri være ditt første UX-valg. Men ikke vær redd for å bruke dem når alternativet er å la brukeren lure på om søknaden din har fått hjertestans.

Merk: Denne opplæringen er fokusert på fremdriftsdialogen, og ignorerer som sådan hva som skjer med den langvarige I / O-seg selv når en orientering finner sted. Jeg har skrevet en annen tutorial om langvarig I / O som går inn på å passere asynkrone oppgaver mellom livssyklushendelser.

© Copyright 2020 | mobilegn.com