Android's ubestemmelige tutorial om ProgressDialog

I min drømmeverden skulle en bruger aldrig vente på et program for at hente data fra en server. Desværre, mens de digitale rørledninger, der foder de nyeste og bedste mobile apps fortsætter med at udvides, har vi ikke helt nået punktet med øjeblikkelige data.

Når det kommer til at skrive mobile applikationer, er der et antal tricks-of-the-trade for at beskytte brugeren mod meget af den kedelige knasning, der foregår i baggrunden. Der er stadig tidspunkter, hvor den bedre brugeroplevelse (UX) er at vise en "venligst vent" -dialog, i stedet for at lade brugeren skrabe sit hoved og undre sig over, hvad der foregår.

Heldigvis har Android-rammen et antal indbyggede klasser til at håndtere disse situationer. En sådan klasse er ProgressDialog. Eksemplet, der følger, viser en dialog og en spin, mens noget baggrundsarbejde fortsætter. Som det er almindelig praksis på Android-platformen, skal ethvert baggrundsarbejde flyttes ud af brugergrænsefladen (UI) -tråden. Dette opnås generelt med AsyncTask-klassen.

Føl dig fri med at følge trinvis vejledning nedenfor, eller downloade og importere hele projektet til Eclipse.

1. Opret et nyt Android-projekt i Eclipse. Mål mod Android 1.6 eller nyere. Sørg for at omdøbe startaktiviteten til Main.java og det tilhørende layout til main.xml.

2. Opret et lineært layout i mappen / res, der indeholder et enkelt tekstfelt og en knap.

 main.xml 
 "Http://schemas.android.com/apk/res/android" 
 android: layout_width = "fill_parent" 
 android: layout_height = "fill_parent" 
 android: orientering = "lodret" 
 android: gravitation = "center" > 
 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 = "Gør baggrundsbearbejdning" 
 android: id = "@ + id / the_button" /> 

3. Rediger Main.java i mappen / src. Tilsæt aktivitetssammenhængen i tilsætningsoverskridelsen og tråd vores knaplytter op.

 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 udvider Aktivitetsimplementerer OnClickListener {privat kontekstkontekst; privat ProgressDialog pd; privat knap b; @Override offentligt tomrum onCreate (Bundle gemtInstanceState) {super.onCreate (gemtInstanceState); setContentView (R.layout.main); kontekst = dette; b = (knap) findViewById (R.id.the_button); b.setOnClickListener (dette); } @Override beskyttet tomrum onDestroy () {if (pd! = Null) {pd.dismiss (); b.setEnabled (sand); } super.onDestroy (); }} 

4. Behandleren på klikvisningen er ansvarlig for at deaktivere knappen og derefter gyde en ny AsyncTask, der håndterer baggrundsarbejdet. I før og efter udførelsesmetoder bekymrer vi os om ProgressDialog og aktiverer knappen igen.

 @Override offentligt ugyldigt onClick (View v) {v.setEnabled (false); AsyncTask-opgave = ny AsyncTask () {@Override beskyttet tomrum onPreExecute () {pd = new ProgressDialog (kontekst); pd.setTitle ( "Behandler ..."); pd.setMessage ("Vent venligst."); pd.setCancelable (falsk); pd.setIndeterminate (sand); pd.show (); } @Override-beskyttet Void doInBackground (Void ... arg0) {prøv {// Gør noget ... Thread.sleep (5000); } fangst (InterruptException e) {// TODO Auto-genereret fangstblok e.printStackTrace (); } return null; } @Override beskyttet tomrum onPostExecute (Void-resultat) {if (pd! = Null) {pd.dismiss (); b.setEnabled (sand); }}}; task.execute ((Void ) null); } 

Nu er vores demo klar til at køre. Inden du indlæser den på en enhed, skal du se nærmere på onPreExecute-metoden i AsyncTask. Bemærk, hvordan vi opsætter et antal egenskaber på ProgressDialog? Titel- og meddelelsesegenskaber er ret selvforklarende, men du kan være nysgerrig efter de annullérbare og ubestemte egenskaber. Den første egenskab specificerer, om brugeren kan annullere dialogen ved at trykke uden for den. Den anden egenskab fortæller dialogen, om der skal vises en spinner. Hvis den er falsk, vil ProgressDialog indeholde en reel statuslinje, og du bliver nødt til periodisk at opdatere brugergrænsefladen med den aktuelle afsluttende procentdel af din baggrundsopgave.

Ubestemte fremdriftsdialoger skal aldrig være dit første UX-valg. Men vær ikke bange for at bruge dem, når alternativet er at forlade brugeren, der spekulerer på, om din ansøgning har lidt hjertestop.

Bemærk: Denne tutorial er fokuseret på statusdialogen og ignorer som sådan, hvad der sker med den langvarige I / O, selv når en orientering finder sted. Jeg har skrevet en anden tutorial om langvarig I / O, der dækker over at passere asynkrone opgaver mellem livscyklusbegivenheder.

© Copyright 2020 | mobilegn.com