AKTIVITETER OG INTENSJONER...



Like dokumenter
2 Aktiviteter og intensjoner

2 Grafisk grensesnitt 1

2 Aktiviteter og intensjoner

INF1000 Metoder. Marit Nybakken 16. februar 2004

1. NetBeans IDE: Lage en enkel mobilapplikasjon

Oblig 4 (av 4) INF1000, høsten 2012 Værdata, leveres innen 9. nov. kl

Eksport og innsending

Husk at du skal ha to vinduer åpne. Det ene er 'Python Shell' og det andre er for å skrive kode i.

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

Utførelse av programmer, metoder og synlighet av variabler i JSP

GUI-programmering, del 3 Vinduslyttere Dialogvinduer GUI-komponenten JTable Egne datamodellklasser. En oversikt over kapittel 19 i boka

INF1010 Arv. Marit Nybakken 2. februar 2004

Skilpadder hele veien ned

Kanter, kanter, mange mangekanter

Enkle generiske klasser i Java

Redd verden. Steg 1: Legg til Ronny og søppelet. Sjekkliste. Introduksjon

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring AITeL

Tre måter å lese fra terminal. Java 4. Eksempel. Formatert utskrift til skjerm

Oblig4 - obligatorisk oppgave nr. 4 (av 4) i INF1000

Diverse eksamensgaver

Java fra Eclipse til Evalanche

Communicate SymWriter: R5. Brett og knapper

TDT4102 Prosedyre og Objektorientert programmering Vår 2014

Spøkelsesjakten. Introduksjon

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

Dagens tema: 12 gode råd for en kompilatorskriver. Sjekking av navn. Lagring av navn. Hvordan finne et navn?

Gangemesteren Nybegynner Scratch PDF

Lage en ny spillverden

ToPlayer. Steg 1: Kom i gang med metodene setup og draw. Gjør dette: Introduksjon:

ToPlayer. Introduksjon: Skrevet av: Ruben Gjerstad Eide og Kine Gjerstad Eide

Farger Introduksjon Processing PDF

Straffespark Introduksjon Scratch Lærerveiledning

2 Om statiske variable/konstanter og statiske metoder.

Grafisk Brukergrensesnitt

Soloball. Steg 1: En roterende katt. Sjekkliste. Test prosjektet. Introduksjon. Vi begynner med å se på hvordan vi kan få kattefiguren til å rotere.

Algoritmer og datastrukturer Kapittel 9 - Delkapittel 9.2

Veileder i bruk av GoodReader

1. Å lage programmer i C++

Programinnstillinger. KAPITTEL 5 Innstillinger

Utførelse av programmer, funksjoner og synlighet av variabler (Matl.)

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

1. Å lage programmer i C++

- Java kan lastes ned gratis For installasjon, se punktet Hvordan laster jeg ned og installerer Java på min maskin?.

Øving 0 - Xcode TDT4102

TOD063 Datastrukturer og algoritmer

Kort oversikt over. eksport-/import-programmet for. WinMed

Enarmet banditt Nybegynner Scratch Lærerveiledning

Shellscripting I. Innhold

notater Gule lapper Mine Et praktisk eksempel med objekter IT2 Læreplansmål Gløer Olav Langslet Sandvika VGS

Tre på rad mot datamaskinen. Steg 1: Vi fortsetter fra forrige gang. Sjekkliste. Introduksjon

Forklaring til programmet AbstraktKontoTest.java med tilhørende filer Konto.java, KredittKonto.java, SpareKonto.java

Introduksjon til objektorientert. programmering. Hva skjedde ~1967? Lokale (og globale) helter. Grunnkurs i objektorientert.

Oppgavesett videregående kurs i NVivo 9

1) Sørg for at du fortsatt er i eventredigeringsmodus (klikk F6 på tastaturet, eller velg ikonet med en person fra menylinjen).

Programmeringsspråk for nybegynnere. Krav til språket. Krav til språket. Krav til språket

1 Kodegenerering fra Tau Suiten

Skilpaddefraktaler Erfaren Python PDF

Universitetet i Bergen Det matematisk-naturvitenskapelige fakultet Institutt for informatikk

PixEdit Guide MEDFAK (5. utkast)

Dagens tema: Mer av det dere trenger til del 1

Steg 1: Opprette app-pakke, app-klasse og FXML-fil

BOKMÅL Side 1 av 5. KONTERINGSEKSAMEN I FAG TDT4102 Prosedyre og objektorientert programmering. Onsdag 6. august 2008 Kl

Elektronisk utlånskontroll

Brukermanual for kommuneansvarlig og testleder

Steg 1: Sette opp Java-prosjekt, og lage app-mappe og app-klasse

Løse reelle problemer

BACKUP HD SERIES BRUKERMANUAL

Kapittel og 5. september Institutt for geofag Universitetet i Oslo. GEO En Introduksjon til MatLab. Kapittel 4.

Klask-en-Muldvarp. Steg 1: Gjøre klart spillbrettet. Sjekkliste. Introduksjon

Bruk av oppgaver og grupper i

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Asteroids. Oversikt over prosjektet. Steg 1: Enda et flyvende romskip. Plan. Sjekkliste. Introduksjon

INF Seminaroppgaver til uke 3

TOD063 Datastrukturer og algoritmer

Velkommen som ny bruker av Uni Økonomi!

Logo med FXML. Introduksjon. Skrevet av: Hallvard Trætteberg

Hvor i All Verden? Del 2 Erfaren Scratch PDF

2009 Thomas Haugland Rudfoss. PowerPoint 2007 En rask introduksjon

<?php. count tar en array som argument, og returnerer et tall som uttrykker antallet innførsler i arrayen.

Argumenter fra kommandolinjen

JavaScriptbibliotek. Introduksjon MVVC. Informasjonsteknologi 2. Gløer Olav Langslet Sandvika VGS

Arrangere lagturnering i Ruter

Del 1: Overgang fra gammel hjemmeside til ny hjemmeside

GruNot '95. Notatsystem for gruppeterapi. Versjon

HØGSKOLEN I SØR-TRØNDELAG

Hvordan legge til et dokument/bilde på en eksisterende side:

Brukerveiledning for Digifob Pro

Løsningsforslag Øving 5 TMA4140 Diskret matematikk Høsten 2010

Løsningsforslag ukeoppg. 9: okt (INF Høst 2011)

Ordliste. Obligatorisk oppgave 1 - Inf 1020

Debugging. Tore Berg Hansen, TISIP

Steg for steg. Sånn tar du backup av Macen din

Bytte til Outlook 2010

Lærebok. Opplæring i CuraGuard. CuraGuard Opplæringsbok, - utviklet av SeniorSaken -

Verdens korteste grunnkurs i Excel (2007-versjonen)

3. Introduksjon til prosjektet Hringr. Scratch fra scratch Enkel programmering for nybegynnere

Høst Øving 5. 1 Teori. 2 Månedskalender. Norges teknisknaturvitenskapelige universitet Institutt for datateknikk og informasjonsvitenskap

GUI («Graphical User Interface») del 2

Opprydding og Vedlikehold av Windows

HØGSKOLEN I SØR-TRØNDELAG

Transkript:

Aktiviteter og intensjoner Mildrid Ljosland, Institutt for informatikk og e-læring ved NTNU Lærestoffet er utviklet for faget IFUD1042 Applikasjonsutvikling for Android Resymé: Tema for denne leksjonen er lærebokas kapittel 2og 3. Vi ser på to grunnleggende begreper, aktivitet (activity) og intensjon (intent) samt noen grunnleggende UI-komponenter. 2 Aktiviteter og intensjoner 2 AKTIVITETER OG INTENSJONER... 1 2.1 AKTIVITET... 2 Eksempel... 3 2.2 INTENSJON... 4 StartActivity... 5 StartActivityForResult... 8 Sende med opplysninger i en Intent... 9 2.3 NOEN GRUNNLEGGENDE UI-KOMPONENTER... 9 TextView og andre enkle komponenter... 9 Toast, AlertDialog og Notification... 10

Aktiviteter og intensjoner side 2 av 11 2.1 Aktivitet En Android-applikasjon kan bestå av null eller flere aktiviteter, vanligvis minst en. En aktivitet er et vindu som inneholder et brukergrensesnitt til applikasjonen. Hvis vi ønsker flere forskjellige brukergrensesnitt, for eksempel et startbilde, og deretter et eller flere grensesnitt som bruker kan bevege seg mellom, lager vi flere aktiviteter (eller fragmenter det skal vi komme tilbake til i en senere leksjon) og sørger for at de ulike aktivitetene skifter på å vises fram på skjermen. En aktivitet lages ved å lage en Java-klasse som er en avledet klasse fra klassen Activity, det vil si at vi skriver class minaktivitet extends Activity {. Android Studio (i hvert fall den versjonen jeg bruker) lager følgende start på java-filen: import android.support.v7.app.actionbaractivity; import android.os.bundle; import android.view.menu; import android.view.menuitem; public class MainActivity extends ActionBarActivity { Jeg ønsker ikke å bruke ActionBar, og endrer til extends Activity, og i stedet for import android.support.v7.app.actionbaractivity; skriver jeg import android.app.activity; Klassen Activity har diverse metoder som vi kan omdefinere i vår klasse. Den som iallfall må omdefineres, er oncreate(). Den som lages automatisk for oss ser slik ut: @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_main); (Husk å sette på @Override hver gang du skal omdefinere en metode. Da vil kompilatoren sjekke at metodehodet stemmer, og du risikerer ikke at du ved et uhell definerer en helt ny metode istedenfor å omdefinere en allerede eksisterende. Det er nemlig de metodene som allerede er definert, og som eventuelt er omdefinert, som blir brukt i diverse call-backsituasjoner. Har du laget en annen metode, selv om den kanskje har samme navn, vil den ikke bli brukt, og programmet fungerer ikke slik du har tenkt.) Andre metoder som vi kan omdefinere er onstart(), onresume(), onpause(), onstop(), ondestroy(), onrestart(). Dette er metoder som kalles underveis i livsløpet til aktiviteten. Studer figur 2-1 i læreboka der dette livsløpet er beskrevet. I ActivityDemo vises hvordan man kan legge inn utskrifter i de ulike metodene, slik at man kan se når de blir kalt. Eksperimenter med dette! Prøv også ut LogCat som forklart i tilknytning til figur 2.2 Merk at alle aktiviteter må registreres i AndroidManifest.xml. Der skal hver aktivitet ha sitt <activity>-element.

Aktiviteter og intensjoner side 3 av 11 Eksempel Vi skal lage en applikasjon som viser fram et flagg. Først definerer jeg et nytt prosjekt FlagsApplication med aktiviteten NorwayActivity og plasserer tre png-bilder i en av drawable-katalogene (likegyldig hvilken). Det ene bildet, som jeg har kalt icon.png, er et norsk flagg i liten størrelse, egnet som ikon for applikasjonen. Deretter har jeg to større bilder, et av norsk flagg (norway.png) og et av det britiske flagget (uk.png). Alle flaggbildene har jeg funnet på Internett, og det er lett å finne mange flere. (Husk at filnavn ikke kan inneholde store bokstaver, bindestrek og diverse andre tegn, så filnavnene må vanligvis endres.) Deretter fjerner jeg det TextView-elementet som lages automatisk i activity_norway og legger i stedet inn et ImageView (ved i design-modus å dra inn i bildet av skjermen en ImageView som finnes under Widgets). Når bildet er valgt, kan jeg lete fram src i Propertiesvienduet, og ved å klikke på det tomme feltet, får jeg opp en boks der jeg kan bla meg gjennom Drawable-katalogen og finne norway.png. Til slutt endrer jeg ikonet for i manifestfila til icon og label til title_activity. Title_activity definerer jeg i strings.xml (kan gjøres enten direkte i xml-filen eller ved å åpne editoren). Da gjenstår bare å kjøre applikasjonen. Vi ser at FlagsApplication har fått det norske flagget som icon, og vi får vist det fram Neste trinn er å lage en tilsvarende applikasjon med det britiske flagget. Jeg kopierer activity_norway.xml og kaller kopien activity_uk.xml. Bildet endrer jeg til uk.png. Tilsvarende kopierer jeg NorwayActivity.java og endrer navnet på kopien til UKActivity.java. Klassenavnet endrer seg automatisk. setcontentview settes til R.layout.activity_uk. UKActivity må registreres i manifest-filen ved å legge den til i Application-fanen.. Manifest-fila ser nå slik ut: <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="no.hist.itfag.flagsapplication" > <application android:allowbackup="true" android:icon="@drawable/icon" android:label="@string/app_name" android:theme="@style/apptheme" > <activity

Aktiviteter og intensjoner side 4 av 11 android:name=".norwayactivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.main" /> /> <category android:name="android.intent.category.launcher" </intent-filter> </activity> <activity android:name=".ukactivity" android:label="@string/title_activity" android:icon="@drawable/icon"> </activity> </application> </manifest> For å få vist fram det britiske flagget må vi flytte intent-filteret fra NorwayActivity til UKActivity i manifest-filen. 2.2 Intensjon Nest etter Activity, er Intent den viktigste komponenten i en Android-app. Intent er en budbringer mellom ulike aktiviteter, intert i en applikasjon eller mellom ulike applikasjoner. Den kan gi beskjed om at en annen aktivitet skal startes, sende med nødvendige data og returnere data fra denne aktiviteten. Vi har allerede møtt den i manifest-fila, i form av et

Aktiviteter og intensjoner side 5 av 11 intent-filter med en action og en category. Action forteller hvilken aktivitet som skal startes, mens kategoriene grupperer de eksisterende intensjoner i logiske grupper. I det foregående eksesmplet sørger manifest-filen for at intensjon android.intent.action.main starter vår NorwayActivity. Når vi skal bruke intensjoner, lager vi et objekt av klassen Intent. Der spesifiserer vi navnet på den aktiviteten vi ønsker å starte, og kaller meoden startactivity(), for eksempel slik: startactivity(new Intent("no.hist.itfag.UKActivity")); I tillegg må vi legge den inn i Manifest-fila, f.eks. slik: <activity android:name=".ukactivity" android:label="@string/title_activity" > <intent-filter> <action android:name="no.hist.itfag.ukactivity" /> <category android:name="android.intent.category.default" /> </intent-filter> </activity> Når den har kategori DEFAULT, kan den tas i bruk av andre aktiviteter, både intert i den samme applikasjonen, og fra andre applikasjoner. StartActivity I vårt eksempel er det nokså uhensiktsmessig å måtte gå inn i manifest-filen for å få vist fram det britiske flagget. Det ville vært mye kjekkere om bruker kunne styrt det fra applikasjonen. Det kan vi få til ved å legge inn en knapp. Inni klassen NorwayActivity legger vi metoden: public void onclick(view v) { startactivity(new Intent("no.hist.itfag.UKActivity")); finish(); Denne metoden definerer hva som skal hende når knappen trykkes. Her sier vi at vi skal starte en ny aktivitet, og hvilken aktivitet som skal startes, defineres i en Intent. Vi passer også på å avslutte den kjørende aktiviteten med finish(), slik at det ikke hoper seg opp med aktiviteter som ligger i bakgrunnen og tar opp ressurser. I activity_norway.xml legger jeg inn en button. For den setter jeg properties onclick lik onclick og text lik @string/change_activity. Denne fila ser dermed slik ut: <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:paddingleft="@dimen/activity_horizontal_margin" android:paddingright="@dimen/activity_horizontal_margin" android:paddingtop="@dimen/activity_vertical_margin" android:paddingbottom="@dimen/activity_vertical_margin" tools:context=".norwayactivity"> <ImageView android:layout_width="wrap_content" android:layout_height="wrap_content" android:id="@+id/imageview" android:src="@drawable/norway" />

Aktiviteter og intensjoner side 6 av 11 <Button android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/change_activity" android:id="@+id/button" android:layout_below="@+id/imageview" android:layout_centerhorizontal="true" android:layout_margintop="58dp" android:onclick="onclick" /> </RelativeLayout> Etter at jeg har lagt inn intentfilter <intent-filter> <action android:name="no.hist.itfag.ukactivity" /> <category android:name="android.intent.category.default" /> </intent-filter> i UKActivity i manifest-fila, kan jeg kjøre applikasjonen. Vi ønsker også å kunne skifte fra britisk til norsk flagg, og legger inn de samme tingene i UKActivity.java og activity_uk.xml som vi har i NorwayActivity og activity_norway, samt intentfilter DEFAULT for NorwayActivity. Men her skal vi i tillegg legge inn muligheten av å skifte flagg uten å skifte aktivitet. Endre aktivitet fører oss tilbake til NorwayActivity, mens Endre flagg skifter flagg i UKActivity. Vi må altså ha to knapper i activity_uk.xml, og to metoder i UKActivity.java

Aktiviteter og intensjoner side 7 av 11 Her er programkoden: package no.hist.itfag.flagsapplication; import android.content.intent; import android.os.bundle; import android.app.activity; import android.view.view; import android.widget.imageview; public class UKActivity extends Activity { private int flagvalue = R.drawable.uk; @Override protected void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.activity_uk); public void onclick1(view v) { startactivity(new Intent("no.hist.itfag.NorwayActivity")); finish(); public void onclick2(view v) { if (flagvalue == R.drawable.norway){ flagvalue = R.drawable.uk; else { flagvalue = R.drawable.norway; ImageView flag=(imageview)findviewbyid(r.id.imageview); flag.setimageresource(flagvalue); For å holde rede på hvilket flagg som er satt, har jeg innført objektvariabelen flagvalue. Den viser i utgangspunktet til det britiske flagget, men endres hver gang vi velger Endre flagg. Merk at dette er et heltall. Ta fram R.java, så ser du hele lista over mulige ressurser. Men det er bare de som er drawable som kan brukes i ImageView. Til slutt finner vi den grafiske komponenten som viser fram flagget, og endrer hvilket bilde som skal vises fram.

Aktiviteter og intensjoner side 8 av 11 StartActivityForResult Hvis vi vil at en aktivitet skal returnere en verdi til den aktiviteten som startet den, bruker vi metoden startactivityforresult(). Da må vi også definere metoden onactivityresult(). Den blir kalt når den aktiviteten vi startet, er ferdig. I denne metoden får vi tilbake resultatet i form av en ny Intent, samt at vi får med en resultcode som forteller om alt er OK eller ikke. Her er et eksempel (se fullstendig kode lenger ned): startactivityforresult(new Intent("no.hist.itfag.UKActivity"), request_code); public void onactivityresult(int requestcode, int resultcode, Intent data) { if (requestcode == request_code && resultcode==result_ok) { flaggverdi = data.getintextra("flag", R.drawable.uk); request_code er et tall som sikrer at det er den riktige aktiviteten som behandles vi kan ha startet flere ulike. Den returnerte verdien finnes i objetktet data, og kan ha ulike typer. Her har vi valgt å la det være en int. Uansett type har den et navn (her flag, og en verdi. For intverdier (og andre tallverdier) kreves også en defaultverdi som brukes hvis ingenting er satt, her er defaultverdien R.drawable.uk. I den aktiviteten som startes (her UKActivity), må dataene settes. Det kan gjøres slik: Intent intent = new Intent(); intent.putextra("flag", flaggverdi); setresult(result_ok, intent); finish(); Vi navngir altså verdien og putter den inn i en intent. Så setter vi resultatet til OK og avslutter denne aktiviteten. Da gjenopptas den forrige og dens onactivityresult() kalles. Tilbake til vårt eksempel: Nå skal vi endre applikasjonen slik at NorwayActivity ber om et resultat fra UKActivity. Det betyr at vi istedenfor startactivity() bruker startactivityforresult() i NorwayActivity, og setter resultatet med putextra() i UKActivity. Resultatet vi skal utveksle, er hvilket flagg UKActivity viser fram. I NorwayActivity endrer vi onclick til følgende: public void onclick(view v) { // startactivity(new Intent("no.hist.itfag.UKActivity")); // finish(); startactivityforresult( new Intent("no.hist.itfag.UKActivity"), request_code); Nå må vi droppe finish for å unngå at NorwayActivity avsluttes øyeblikkelig når UKActivity er ferdig, vil skal jo tilbake til den når UKActivity er ferdig. request_code lar vi være en objektvariabel med verdien 1. Så lager vi metoden onactivityresult(). Her lager vi det slik at NorwayActivity også viser det samme flagget som UKActivity viste. Her er metoden:

Aktiviteter og intensjoner side 9 av 11 @Override public void onactivityresult(int requestcode, int resultcode, Intent data) { if (requestcode == request_code && resultcode==result_ok) { flagvalue = data.getintextra("flag", R.drawable.uk); ImageView flag=(imageview)findviewbyid(r.id.imageview1); flag.setimageresource(flagvalue); I UKActivity må vi sette resultatet. Da endrer vi onclick1() slik: public void onclick1(view v) { // startactivity(new Intent("no.hist.itfag.NorwayActivity")); Intent intent = new Intent(); intent.putextra("flag", flagvalue); setresult(result_ok, intent); finish(); Vi starter altså ikke NorwayActivity på nytt, vi går tilbake til den aktiviteten vi hadde fra før. Dette skjer automatisk når UKActivity avsluttes ved finish(). Og i NorwayActivity kalles onactivityresult, der intent sendes med. Sende med opplysninger i en Intent Til slutt skal vi endre applikasjonen slik at NorwayActivity sender med opplysning om hvilket flagg UKActivity skal vise fram. Det gjør vi ved å bruke putextra() for intent før vi sender den av gårde. public void onclick(view v) { // startactivity(new Intent("no.hist.itfag.UKActivity")); // finish(); // startactivityforresult(new Intent("no.hist.itfag.UKActivity"), request_code); Intent intent = new Intent("no.hist.itfag.UKActivity"); intent.putextra("flag", flagvalue); startactivityforresult(intent, request_code); Så må UKActivity hente den fram i oncreate(): public void oncreate(bundle savedinstancestate) { super.oncreate(savedinstancestate); setcontentview(r.layout.uk); flagvalue = getintent().getintextra("flag", flagvalue); ImageView flag=(imageview)findviewbyid(r.id.imageview1); flag.setimageresource(flagvalue); Denne versjonen av applikasjonen finner du i pakket versjon sammen med denne leksjonen. 2.3 Noen grunnleggende UI-komponenter TextView og andre enkle komponenter Den aller enkleste UI-kmponenten, TextView, har du allerede støtt på flere ganger. Den brukes til å vise fram tekst til brukeren. En liknende, EditText, brukes når brukeren skal skrive noe. For å få tak i det brukeren har skrevet, må vi første hente fram EditText-objektet, deretter bruke metoden gettext().

Aktiviteter og intensjoner side 10 av 11 Klassen Button har du også møtt allerede, og så at vi kan forbinde knappen med en onclickmetode som blir utført nå knappen klikkes. ImageButton fungerer akkurat som Button, men den vises fram som et bilde. Da må vi naturlig nok fortelle hvilket bilde som skal vises fram, det kan gjøres ved å skrive scr=. inni xml-definisjonen av knappen. ImageView ligner på TextView iogmed at den viser fram noe, men altså et bilde istedenfor tekst. CheckBox og ToggleButton har begge to tilstander, valgt eller ikke valgt. Den eneste forskjellen på dem er hvordan de tegnes opp. RadioButton har også to tilstander, valgt eller ikke valgt. Men her samler vi vanligvis flere slike knapper i en RadioGroup. Dette gjør at bare en i gruppa kan være valgt på ethvert tidpunkt. For alle komponentene gjelder at vi bør gi dem en id i den tilhørende xml-filen. Da kan vi finne dem igjen i java-programmet ved å bruke findviewbyid(r.id.et_eller_annet). Da får vi ut koponenten som et View-objekt (som de er subklasser av). Vanligvis foretar vi en casting til akkurat riktig klasse, slik at vi kan bruke de metodene som er spesiell for denne klassen. ProgressBar kan brukes til å gi bruker tilbakemelding om hvor langt en pågående oppgave er kommet. Dette er nyttig hvis oppgaven tar såpass lang tid at bruker kan begynne å lure på om noe har gått galt. Slike oppgaver bør gjøres i en egen tråd, noe vi behandler mer inngående i senere leksjoner. For å velge dato og klokkeslett har vi klassene DatePicker og TimePicker. For TimePicker kan man velge mellom 12-timersklokke og 24-timersklokke. Disse kan settes ved å kalle metodene setis24hourview(true) eller (false). Toast, AlertDialog og Notification Toast er en enkel måte å gi tilbakemelding til brukeren på. Den statiske metoden maketext() lager et Toast-objekt, mens metoden show() viser den fram. Så for å få vist fram teksten «Dette er en test», kan du skrive Toast.makeText(this, "Dette er en test", Toast.LENGTH_LONG).show(); eller Toast.makeText(this, R.string.tekst, Toast.LENGTH_LONG).show(); hvis teksten er lagt inn i strings.xml. this brukes hvis du er i en metode i Activity-klassen, ellers må du bruke getactivity() eller getapplicationcontext(), avhengig av hvilken klasse du er i. AlertDialog er et vindu med en eller flere knapper som kommer opp på toppen av det vanlige vinduet. Der kommer det en meldig og for eksempel en OK-knapp som bruker trykker på for å få dialog-vinduet til å forsvinne igjen. Først må vi framskaffe et Builder-objekt: AlertDialog.Builder builder = new AlertDialog.Builder(this); Så kan vi sette den teksten som skal vises: builder.settitle(tittel); Hvis vi vil ha en OK-knapp, kan den lages slik: bilder.setpositivebutton("ok", new MinLytter());

Aktiviteter og intensjoner side 11 av 11 MinLytter er en klasse som for eksempel kan lages slik: class MinLytter implements DialogInterface.OnClickListener { public void onclick(dialogintrerface dialog, int which) { dialog.dismiss(); Alle disse setningene kan slås sammen til en setning på følgende måte: new AlertDialog.Builder(this).setTitle(tittel). setpositivebutton("ok", new DialogInterface.OnClickListener() { public void onclick(dialogintrerface dialog, int which) { dialog.dismiss(); ); new AlertDialog.Builder() lager et nytt Builder-objekt. På dette objektet anvendes metoden settitile(). Returverdien fra denne metoden er det samme Builder-objektet, så da kan vi bruke metoden setpositivebutton() på det samme objektet. Også denne metoden har Builderobjektet som returverdi. Vi kan fortsette å anvende andre metoder, for eksespel setnegativebutton() og setneutralbutton(), så lenge vi ønsker siden alle metodene har Builder-objektet som returverdi. I neste leksjon får du høre mer om hvordan man bruker lyttere. En annen type Builder er Notification.Builder. Med den kan vi lage en «notification», som er en melding som kommer i statuslinjen øverst på skjermen. Hvis man ønsker, kan man lage meldingen slik at et eller annet utføres når brukeren berører meldingen. Da brukes en Intent, nærmere bestemt en PendingIntent, altså en Intent som ligger klar til å bli utført en gang i framtiden. Se læreboka for nærmere detaljer om dette.