22
dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2- Podložno izmeni - Nerecenzirani materijal 1 MOBILNE TEHNOLOGIJE I PROGRAMIRANJE MTIPLAB05 Vežba 5 – Rad sa fragmentima, rasporedima komponenti (layouts) i Android komponentama UVOD U okviru ove vežbe biće dorađena MTIP Studenti Android aplikacija koja je formirana u prethodnoj vežbi (MTIPLab04). Biće oformljeni fragmenti koje će predstavljati odgovarajuće aktivnosti (stranice) spomenute aplikacije, kao i rasporedi komponenti (layouts) koji će biti dinamički i upotrebljeni za formiranje više fragmenata. Cilj ove vežbe je da se pripreme elementi korisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom i RESTFull servisom koji je formiran kroz vežbe MTIPLab01 i MTIPLab02. FRAGMENTI, DEFINISANJE LAYOUTA I KLASA Unutar fajla strings.xml dodate su definicije stringova tj. labela koje se mogu koristiti prilikom definisanja sadržaja određenih elemenata Android aplikacije, tj. u ovom slučaju sadržaja fragmenata koji će biti dodati Android aplikaciji. Sadržaj navedenog fajla prikazan je u listingu koda broj 1. <string name="MTIPStudentiPregragaFragmentNaziv">Pretraga studenata</string> <string name="MTIPStudentiFragmentHintIDStudenta">ID studeta</string> <string name="MTIPStudentiFragmentHintPrezime">Prezime studenta</string> <string name="MTIPStudentiFragmentHintIme">Ime studenta</string> <string name="MTIPStudentiFragmentHintBrojIndeksa">Broj indeksa</string> <string name="MTIPStudentiPregragaFragmentRezultatiPretrage">Rezultati pretrage</string> <string name="MTIPStudentiDodajNovogStudenta">Dodaj novog studenta</string> <string name="MTIPStudentiDetaljiID">ID : </string> <string name="MTIPStudentiDetaljiPrezime">Prezime : </string> <string name="MTIPStudentiDetaljiIme">Ime : </string> <string name="MTIPStudentiDetaljiBrojIndeksa">Broj indeksa : </string> <string name="MTIPStudentiDetaljiStudijskiProgram">Smer : </string> <string name="MTIPStudentiDetaljiIzmeniStudenta">Izmena</string> <string name="MTIPStudentiDetaljiObrisiStudenta">Brisanje</string> <string name="MTIPStudentiPotvrdi">Potvrdi</string> <string name="MTIPStudentiOdustani">Odustani</string> Listing broj 1. Dodati resursi unutar fajla strings.xml

MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

  • Upload
    others

  • View
    10

  • Download
    0

Embed Size (px)

Citation preview

Page 1: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

1

MOBILNE TEHNOLOGIJE I PROGRAMIRANJE –

MTIPLAB05

Vežba 5 – Rad sa fragmentima, rasporedima komponenti (layouts) i

Android komponentama

UVOD

U okviru ove vežbe biće dorađena MTIP Studenti Android aplikacija koja je formirana u

prethodnoj vežbi (MTIPLab04). Biće oformljeni fragmenti koje će predstavljati odgovarajuće

aktivnosti (stranice) spomenute aplikacije, kao i rasporedi komponenti (layouts) koji će biti

dinamički i upotrebljeni za formiranje više fragmenata. Cilj ove vežbe je da se pripreme elementi

korisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05)

oformila veza spomenute aplikacije sa internetom i RESTFull servisom koji je formiran kroz vežbe

MTIPLab01 i MTIPLab02.

FRAGMENTI, DEFINISANJE LAYOUTA I KLASA

Unutar fajla strings.xml dodate su definicije stringova tj. labela koje se mogu koristiti prilikom

definisanja sadržaja određenih elemenata Android aplikacije, tj. u ovom slučaju sadržaja

fragmenata koji će biti dodati Android aplikaciji. Sadržaj navedenog fajla prikazan je u listingu

koda broj 1.

<string name="MTIPStudentiPregragaFragmentNaziv">Pretraga studenata</string>

<string name="MTIPStudentiFragmentHintIDStudenta">ID studeta</string>

<string name="MTIPStudentiFragmentHintPrezime">Prezime studenta</string>

<string name="MTIPStudentiFragmentHintIme">Ime studenta</string>

<string name="MTIPStudentiFragmentHintBrojIndeksa">Broj indeksa</string>

<string name="MTIPStudentiPregragaFragmentRezultatiPretrage">Rezultati

pretrage</string>

<string name="MTIPStudentiDodajNovogStudenta">Dodaj novog studenta</string>

<string name="MTIPStudentiDetaljiID">ID : </string>

<string name="MTIPStudentiDetaljiPrezime">Prezime : </string>

<string name="MTIPStudentiDetaljiIme">Ime : </string>

<string name="MTIPStudentiDetaljiBrojIndeksa">Broj indeksa : </string>

<string name="MTIPStudentiDetaljiStudijskiProgram">Smer : </string>

<string name="MTIPStudentiDetaljiIzmeniStudenta">Izmena</string>

<string name="MTIPStudentiDetaljiObrisiStudenta">Brisanje</string>

<string name="MTIPStudentiPotvrdi">Potvrdi</string>

<string name="MTIPStudentiOdustani">Odustani</string>

Listing broj 1. Dodati resursi unutar fajla strings.xml

Page 2: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

2

Da bi pripremili MTIP Studenti Android za rad sa fragmentima potrebno je modifikovati layout i

kod glavne aktivnosti spomenute aplikacije. Modifikacija layouta glavne aktivnosti odnosi se na

modifikaciju fajla content_mtipstudenti_main.xml dodavanjem FrameLayout komponente.

Navedena komponenta se ponaša kao okvir za fragmente koji nose određeni sadržaj i logiku

aplikacije. Sadržaj fajla content_mtipstudenti_main.xml prikazan je u listingu koda broj 2.

<?xml version="1.0" encoding="utf-8"?>

<android.support.constraint.ConstraintLayout

xmlns:android="http://schemas.android.com/apk/res/android"

xmlns:app="http://schemas.android.com/apk/res-auto"

xmlns:tools="http://schemas.android.com/tools"

android:layout_width="match_parent"

android:layout_height="match_parent"

app:layout_behavior="@string/appbar_scrolling_view_behavior"

tools:context="rs.tfzr.mtipstudenti.MTIPStudentiMain"

tools:showIn="@layout/app_bar_mtipstudenti_main">

<FrameLayout

android:id="@+id/frame_container"

android:layout_width="match_parent"

android:layout_height="match_parent"

/>

</android.support.constraint.ConstraintLayout>

Listing broj 2. Sadržaj fajla content_mtipstudenti_main.xml

Zatim se, radi vizuelnog aspekta aplikacije definiše resurs unutar drawable foldera koji će

predstavljati pozadinu određenih elemenata. Navedeni fajl nosi naziv op_background.xml i

sadržina istog je prikazana u listingu koda broj 3.

<?xml version="1.0" encoding="utf-8"?>

<shape xmlns:android="http://schemas.android.com/apk/res/android">

<solid android:color="#FFFFFF"/>

<stroke android:width="1dip" android:color="#B1BCBE" />

<corners android:radius="10dip"/>

<padding android:left="0dip" android:top="0dip" android:right="0dip"

android:bottom="0dip" />

</shape>

Listing broj 3. Sadržaj fajla op_background.xml

U sledećem koraku formira se raspored (layout) layout_studenti_universal.xml unutar layout

foldera koji će se koristiti za predstavljanje studenta prilikom prikaza informacija o istom i u

“administratorskoj” sekciji prilikom izmene i brisanja istog. Spomenuti layout poseduje četri

labele (TextView-a) koje nose informacije o podatku koji se prikazuje, zatim još četri labele

(TextView-a) koji nose podatke koji se prikazuju, i dve kontrole tipa Button za koje će se u

narednoj vežbi (MTIPLab05) vezati odgovarajući događaji i pozivi RESTFull servisa. Spomenuti

tasteri će se sakrivati (uklanjati) kad se spomenuti layout koristi za prikaz informacije o studentu.

Sadržaj navedenog fajla prikazan je u listingu koda broj 4, dok je na slici broj 1 prikazan izgled

spomenutog layouta unutar Android Studio razvojnog okruženja.

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:padding="5dp"

android:background="@drawable/op_background"

Page 3: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

3

android:id="@+id/linearLayoutStudentiUniversalContainer">

<LinearLayout

android:id="@+id/linearLayoutPrezimeStudenta"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:padding="5dp"

android:weightSum="1">

<TextView

android:id="@+id/textViewPrezimeLABEL"

android:layout_height="wrap_content"

android:layout_width="15dp"

android:layout_weight="0.3"

android:gravity="right"

android:text="@string/MTIPStudentiDetaljiPrezime" />

<TextView

android:id="@+id/textViewPrezimeDATA"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="0.7"

/>

</LinearLayout>

<LinearLayout

android:id="@+id/linearLayoutImeStudenta"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:padding="5dp"

android:weightSum="1">

<TextView

android:id="@+id/textViewImeLABEL"

android:layout_width="15dp"

android:layout_height="wrap_content"

android:layout_weight="0.3"

android:gravity="right"

android:text="@string/MTIPStudentiDetaljiIme" />

<TextView

android:id="@+id/textViewImeDATA"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="0.7"

/>

</LinearLayout>

<LinearLayout

android:id="@+id/linearLayoutBrojIndeksaStudenta"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:padding="5dp"

android:weightSum="1">

<TextView

android:id="@+id/textViewBrojIndeksaLABEL"

android:layout_height="wrap_content"

android:layout_width="15dp"

android:layout_weight="0.3"

android:gravity="right"

android:text="@string/MTIPStudentiDetaljiBrojIndeksa" />

<TextView

android:id="@+id/textViewBrojIndeksaDATA"

android:layout_width="wrap_content"

Page 4: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

4

android:layout_height="wrap_content"

android:layout_weight="0.7"

/>

</LinearLayout>

<LinearLayout

android:id="@+id/linearLayoutStudijskiProgramStudenta"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:padding="5dp"

android:weightSum="1">

<TextView

android:id="@+id/textViewStudijskiProgramLABEL"

android:layout_height="wrap_content"

android:layout_width="15dp"

android:layout_weight="0.3"

android:gravity="right"

android:text="@string/MTIPStudentiDetaljiStudijskiProgram" />

<TextView

android:id="@+id/textViewStudijskiProgramDATA"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="0.7"

/>

</LinearLayout>

<LinearLayout

android:id="@+id/linearLayoutTasteri"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<Button

android:id="@+id/buttonIzmeniStudenta"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="@string/MTIPStudentiDetaljiIzmeniStudenta" />

<Button

android:id="@+id/buttonObrisiStudenta"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="@string/MTIPStudentiDetaljiObrisiStudenta" />

</LinearLayout>

</LinearLayout>

Listing broj 4. Sadržaj fajla layout_studenti_universal.xml

Naredni korak odnosi se na formiranje layouta koji će se koristiti u fragmentima prilikom

dodavanja novog studenta i izmene postojećeg studenta. Naknadno će biti formirane klase koje

će na osnovu spomenutog layouta pružati usluge dodavanja novog i izmene postojećeg studenta.

Dakle, potrebno je formirati layout fragment_studenti_dodavanje_izmena.xml i smestiti ga u

layout folder. Navedeni layout sadrži pet labela (TextView-a) koje nose informacije o podatku

koji se prikazuje, četri textbox-a (EditText-a) putem kojih će se unositi podatci i jedan combobox

(Spinner kontrola) koja će sadržati dostupne smerove tj. studijski program kojem određeni

student pripada. Unutar navedenog layouta postoje i dve kontrole tipa Button koje će se koristiti

za potvrđivanje dodavanja novog ili izmene postojećeg studenta, kao i za odustajanje od

Page 5: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

5

spomenutih procesa čime se korisnik preusmerava ka nekom drugom fragmentu. Sadržaj

spomenutog fajla prikazan je u listingu koda broj 5, dok je na slici broj 2 prikazan izgled

spomenutog layouta unutar Android Studio razvojnog okruženja.

Slika broj 1. Izgled layout-a layout_studenti_universal.xml

<FrameLayout 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"

tools:context="rs.tfzr.mtipstudenti.StudentiDodavanjeFragment">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:padding="5dp"

android:background="@drawable/op_background"

android:id="@+id/dodavanjeIzmenaMainLinearLayout">

<TextView

android:id="@+id/textViewStudentiNazivAkcije"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:paddingLeft="10dp"

android:paddingRight="10dp"

android:paddingTop="10dp"

android:text="@string/MTIPContentDescription" />

<LinearLayout

android:id="@+id/linearLayoutIDStudenta"

android:layout_width="match_parent"

Page 6: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

6

android:layout_height="wrap_content"

android:orientation="horizontal"

android:padding="5dp"

android:weightSum="1">

<TextView

android:id="@+id/textViewIDStudentaLABEL"

android:layout_height="wrap_content"

android:layout_width="50dp"

android:layout_weight="0.4"

android:gravity="right"

android:text="@string/MTIPStudentiDetaljiID" />

<EditText

android:id="@+id/editTextIDStudentaDATA"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:ems="10"

android:hint="@string/MTIPStudentiFragmentHintIDStudenta"

android:inputType="none"

android:focusedByDefault="false"

android:layout_weight="0.6"/>

</LinearLayout>

<LinearLayout

android:id="@+id/linearLayoutPrezimeStudenta"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:padding="5dp"

android:weightSum="1">

<TextView

android:id="@+id/textViewPrezimeLABEL"

android:layout_height="wrap_content"

android:layout_width="50dp"

android:layout_weight="0.4"

android:gravity="right"

android:text="@string/MTIPStudentiDetaljiPrezime" />

<EditText

android:id="@+id/editTextPrezimeDATA"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:ems="10"

android:hint="@string/MTIPStudentiFragmentHintPrezime"

android:inputType="text"

android:focusedByDefault="false"

android:layout_weight="0.6"/>

</LinearLayout>

<LinearLayout

android:id="@+id/linearLayoutImeStudenta"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:padding="5dp"

android:weightSum="1">

<TextView

android:id="@+id/textViewImeLABEL"

android:layout_height="wrap_content"

android:layout_width="50dp"

android:layout_weight="0.4"

Page 7: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

7

android:gravity="right"

android:text="@string/MTIPStudentiDetaljiIme" />

<EditText

android:id="@+id/editTextImeDATA"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:ems="10"

android:hint="@string/MTIPStudentiFragmentHintIme"

android:inputType="text"

android:focusedByDefault="false"

android:layout_weight="0.6"/>

</LinearLayout>

<LinearLayout

android:id="@+id/linearLayoutBrojIndeksaStudenta"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:padding="5dp"

android:weightSum="1">

<TextView

android:id="@+id/textViewBrojIndeksaLABEL"

android:layout_height="wrap_content"

android:layout_width="50dp"

android:layout_weight="0.4"

android:gravity="right"

android:text="@string/MTIPStudentiDetaljiBrojIndeksa" />

<EditText

android:id="@+id/editTextIndeksDATA"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:ems="10"

android:hint="@string/MTIPStudentiFragmentHintBrojIndeksa"

android:inputType="text"

android:focusedByDefault="false"

android:layout_weight="0.6"/>

</LinearLayout>

<LinearLayout

android:id="@+id/linearLayoutStudijskiProgramStudenta"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal"

android:padding="5dp"

android:weightSum="1">

<TextView

android:id="@+id/textViewStudijskiProgramLABEL"

android:layout_width="150dp"

android:layout_height="wrap_content"

android:layout_weight="0.4"

android:gravity="right"

android:text="@string/MTIPStudentiDetaljiStudijskiProgram" />

<Spinner

android:id="@+id/spinnerStudijskiPrograami"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_weight="0.6" />

</LinearLayout>

Page 8: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

8

<LinearLayout

android:id="@+id/linearLayoutTasteriPotvrdiOdustani"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="horizontal">

<Button

android:id="@+id/buttonPotvrdi"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="@string/MTIPStudentiPotvrdi" />

<Button

android:id="@+id/buttonOdustani"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="@string/MTIPStudentiOdustani" />

</LinearLayout>

</LinearLayout>

</FrameLayout>

Listing broj 5. Sadržaj fajla fragment_studenti_dodavanje_izmena.xml

Slika broj 2. Izgled layout-a fragment_studenti_dodavanje_izmena.xml

Sledeći korak odnosi se na formiranje layouta koji će se koristiti u fragmentima za pretragu

(PretragaFragment) i za administraciju studenata (StudentiFragment). Potrebno je formirati

layout fajl fragment_pretraga.xml u layout folderu i isti treba da poseduje sadržinu koja je

prikazana u listingu koda broj 6 dok je izgled spomenutog layouta prikazan na slici broj 3. Unutar

Page 9: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

9

spomenutog layouta nalaze se labele, EditText kontrola i slika (ImageView) koja će se koristiti

kao taster za pozivanje pretrage studenata. Takođe, jedna labela je planirana da se koristi za

prelazak na fragment za dodavanja novog studenta i nosi tekst “Dodaj novog studenta”. Unutar

spomenutog layouta nalaze se kontole tipa ScrollView i LinearLayout koje će se u narednoj

vežbi (MTIPLab06) koristiti kako bi se prikazali podaci o studentima kako na fragmentu za

pretragu, tako i na fragmentu za administraciju studenata.

<FrameLayout 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"

tools:context="rs.tfzr.mtipstudenti.PretragaFragment">

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="fill_parent"

android:layout_height="fill_parent"

android:orientation="vertical"

android:gravity="center_horizontal"

android:id="@+id/mainContainerPretraga">

<TextView

android:id="@+id/textViewPretragaStudenata"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:paddingLeft="10dp"

android:paddingRight="10dp"

android:paddingTop="10dp"

android:text="@string/MTIPStudentiPregragaFragmentNaziv" />

<LinearLayout

android:focusable="true"

android:focusableInTouchMode="true"

android:layout_width="0px"

android:layout_height="0px"/>

<LinearLayout

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:padding="5dp"

android:weightSum="1"

>

<EditText

android:id="@+id/editTextPrezimePretraga"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:ems="10"

android:hint="@string/MTIPStudentiFragmentHintPrezime"

android:inputType="text"

android:paddingTop="10dp"

android:focusedByDefault="false"

android:layout_weight="0.7">

</EditText>

<ImageView

android:id="@+id/imageViewPretraga"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:src="@drawable/nav_pretraga"

android:layout_weight="0.3"/>

Page 10: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

10

</LinearLayout>

<TextView

android:id="@+id/textViewDodajNovogStudenta"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:gravity="center"

android:padding="10dp"

android:text="@string/MTIPStudentiDodajNovogStudenta" />

<ScrollView

android:id="@+id/scrollViewRezultatiPretrage"

android:layout_width="fill_parent"

android:layout_height="wrap_content" >

<LinearLayout

android:id="@+id/layoutRezultatiPretrage"

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:orientation="vertical"

android:gravity="center"

android:paddingLeft="5dp"

android:paddingRight="5dp"

android:paddingBottom="5dp">

</LinearLayout>

</ScrollView>

</LinearLayout>

</FrameLayout>

Listing broj 6. Sadržaj fajla fragment_pretraga.xml

Slika broj 3. Izgled layout-a fragment_pretraga.xml

Page 11: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

11

Sledeći korak odnosi se na modifikaciju koda klase MTIPStudentiMain koja predstavlja glavnu

aktivnost MTIP Studenti Android aplikacije kako bi se dodala podrška za rad sa fragmentima. Za

adekvatno funkcionisanje navedene aplikacije, nakon analize koda i prikaza modifikacije koda

klase MTIPStudentiMain biće formirane klase čiji se objekti koriste u spomenutoj klasi i sadrže

logiku fragmenta (stranica) koje se implementiraju. Sadržaj klase MTIPStudentiMain prikazan

je u listingu koda broj 7.

package rs.tfzr.mtipstudenti;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.Fragment;

import android.app.FragmentManager;

import android.content.Context;

import android.content.DialogInterface;

import android.content.Intent;

import android.net.Uri;

import android.os.Bundle;

import android.view.View;

import android.support.design.widget.NavigationView;

import android.support.v4.view.GravityCompat;

import android.support.v4.widget.DrawerLayout;

import android.support.v7.app.ActionBarDrawerToggle;

import android.support.v7.app.AppCompatActivity;

import android.support.v7.widget.Toolbar;

import android.view.MenuItem;

import android.app.Dialog;

import android.widget.Button;

import android.widget.TextView;

public class MTIPStudentiMain extends AppCompatActivity

implements NavigationView.OnNavigationItemSelectedListener,

PretragaFragment.OnFragmentInteractionListener,

StudentiFragment.OnFragmentInteractionListener,

StudentiDodavanjeFragment.OnFragmentInteractionListener,

StudentiIzmenaFragment.OnFragmentInteractionListener

{

public static Activity _activity;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_mtipstudenti_main);

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);

setSupportActionBar(toolbar);

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(

this, drawer, toolbar, R.string.navigation_drawer_open,

R.string.navigation_drawer_close);

drawer.addDrawerListener(toggle);

toggle.syncState();

NavigationView navigationView = (NavigationView)

findViewById(R.id.nav_view);

navigationView.setNavigationItemSelectedListener(this);

navigationView.setItemIconTintList(null);

displayView(new PretragaFragment(),this);

_activity = this;

}

Page 12: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

12

@Override

public void onBackPressed() {

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

if (drawer.isDrawerOpen(GravityCompat.START)) {

drawer.closeDrawer(GravityCompat.START);

} else {

super.onBackPressed();

}

}

@SuppressWarnings("StatementWithEmptyBody")

@Override

public boolean onNavigationItemSelected(MenuItem item) {

// Handle navigation view item clicks here.

int id = item.getItemId();

switch (id)

{

case R.id.navBar_Pretraga:

{

displayView(new PretragaFragment(),this);

break;

}

case R.id.navBar_Studenti:

{

displayView(new StudentiFragment(),this);

break;

}

case R.id.navBar_Studijski_Programi:

{

AlertDialog.Builder builder = new AlertDialog.Builder(_activity);

builder.setMessage("Treba kreirati stranicu (Fragmente) za

upravljanje Studijskim programima (Smerovima) kao što je urađeno za Studente!")

.setTitle("MTIP Studenti");

builder.setPositiveButton("OK", new

DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

}

});

AlertDialog dialog = builder.create();

dialog.show();

break;

}

case R.id.navBar_O_Aplikaciji:

{

DijalogOAplikaciji();

break;

}

}

DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);

drawer.closeDrawer(GravityCompat.START);

return true;

}

public static void displayView(Fragment fragment, Activity activity) {

// update the main content by replacing fragments

if (fragment != null) {

Page 13: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

13

FragmentManager fragmentManager = activity.getFragmentManager();

fragmentManager.beginTransaction()

.replace(R.id.frame_container, fragment).commit();

}

}

protected void DijalogOAplikaciji()

{

final Dialog dialog = new Dialog(this, R.style.AboutDialog );

dialog.setContentView(R.layout.mtip_about_dialog);

dialog.setTitle("O Aplikaciji");

TextView txtEmail = (TextView)

dialog.findViewById(R.id.textviewAboutDialogEmal);

txtEmail.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

try

{

Intent email = new Intent(Intent.ACTION_SEND);

email.putExtra(Intent.EXTRA_EMAIL, new

String[]{"[email protected]"});

email.putExtra(Intent.EXTRA_SUBJECT, "sugestija / pitanje /

zamerka" );

email.putExtra(Intent.EXTRA_TEXT, "");

email.setType("message/rfc822");

startActivity(Intent.createChooser(email, "Odaberite Vaš e-

mail klijent :" ));

}

catch (Exception ex)

{

}

}

});

Button dialogButton = (Button)

dialog.findViewById(R.id.dialogButtonOKClose);

dialogButton.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View v) {

dialog.dismiss();

}

});

dialog.show();

}

@Override

public void onFragmentInteraction(Uri uri) {

}

}

Listing broj 6. Sadržaj klase MTIPStudentiMain

Analizom listinga koda broj 6 bitno je istaći implementiranje interfejsa

OnFragmentInteractionLintener za fragmente (klase) PretragaFragment,

StudentiFragment, StudentiDodavanjeFragmet i StudentiIzmenaFragment. Spomenute

klase će biti formirane naknadno u nastavku ove vežbe. Zatim, radi lakše manipulacije sa

fragmentima (pošto je prilikom promene fragmenta potrebna referenca ka aktivnosti koja sadrži

Page 14: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

14

kontejner u kojem će se fragment prikazati) formira se statička referenca ka aktivnosti i na

onCreate metodu ista se povezuje sa glavnom aktivnosti linijom koda _activity = this; Napisana

je statička metoda displayView koja prima dva argumenta. Jedan argument je sam fragment tj.

referenca do instance klase koja predstavlja fragment koji treba da se prikaže, a drugi je referenca

do aktivnosti unutar koje treba da se prikaže navedeni fragment. Unutar tela metode koristi se

FragmentManager kako bi se unutar predviđanog kontejnera (R.id.frame_container) prikazao

odabrani fragment. Unutar metode onNavigationItemSelected, unutar switch naredbe, poziva

se statička metoda displayView tako što se prosleđuje odabrani fragment pozivom njegovog

konstruktora, a kao referenca na aktivnost u kojoj treba da se prikaže spomenuti fragment šalje

se referenca this koja u ovom slučaju ukazuje na aktivnost MTIPStudentiMain. Takođe unutar

spomenutog bloka formira se i poziva AlertDialog koji treba da obavesti korisnika ta fragment

koji treba da omogući upravljanje Studijskim programima nije implementiran (kreiran).

Naredni koraci se ogledaju u formiranju klasa koje će predstavljati fragmente i koristiti prethodno

kreirane rasporede komponenti (layout-ove) kako bi pružili funkcionalnost aplikaciji. Sve klase

nalaze se u paketu rs.tfzr.mtipstudenti. Sadržaj klase PretragaFragment koja predstavlja

fragment koji će prikazati klikom na stavku menija Pretraga prikazan je u listingu koda broj 7.

package rs.tfzr.mtipstudenti;

import android.app.AlertDialog;

import android.content.Context;

import android.content.DialogInterface;

import android.net.Uri;

import android.os.Bundle;

import android.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.QuickContactBadge;

import android.widget.TextView;

import org.w3c.dom.Text;

public class PretragaFragment extends Fragment {

// TODO: Rename parameter arguments, choose names that match

// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER

private static final String ARG_PARAM1 = "param1";

private static final String ARG_PARAM2 = "param2";

// TODO: Rename and change types of parameters

private String mParam1;

private String mParam2;

private OnFragmentInteractionListener mListener;

protected TextView _textViewDodajNovogStudenta;

protected ImageView _imageViewPretraga;

protected Context _context;

public PretragaFragment() {

// Required empty public constructor

}

// TODO: Rename and change types and number of parameters

public static PretragaFragment newInstance(String param1, String param2) {

PretragaFragment fragment = new PretragaFragment();

Bundle args = new Bundle();

Page 15: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

15

args.putString(ARG_PARAM1, param1);

args.putString(ARG_PARAM2, param2);

fragment.setArguments(args);

return fragment;

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

if (getArguments() != null) {

mParam1 = getArguments().getString(ARG_PARAM1);

mParam2 = getArguments().getString(ARG_PARAM2);

}

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// Inflate the layout for this fragment

View rootView = inflater.inflate(R.layout.fragment_pretraga, container,

false);

this._context = rootView.getContext();

this._textViewDodajNovogStudenta =

(TextView)rootView.findViewById(R.id.textViewDodajNovogStudenta);

this._textViewDodajNovogStudenta.setVisibility(View.INVISIBLE);

this._imageViewPretraga =

(ImageView)rootView.findViewById(R.id.imageViewPretraga);

this._imageViewPretraga.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

AlertDialog.Builder builder = new

AlertDialog.Builder(getActivity());

builder.setMessage("Treba implementirati pretragu!!")

.setTitle("MTIP Studenti");

builder.setPositiveButton("OK", new

DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

}

});

AlertDialog dialog = builder.create();

dialog.show();

}

});

return rootView;

}

// TODO: Rename method, update argument and hook method into UI event

public void onButtonPressed(Uri uri) {

if (mListener != null) {

mListener.onFragmentInteraction(uri);

}

}

@Override

public void onAttach(Context context) {

super.onAttach(context);

if (context instanceof OnFragmentInteractionListener) {

mListener = (OnFragmentInteractionListener) context;

} else {

throw new RuntimeException(context.toString()

+ " must implement OnFragmentInteractionListener");

}

Page 16: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

16

}

@Override

public void onDetach() {

super.onDetach();

mListener = null;

}

public interface OnFragmentInteractionListener {

// TODO: Update argument type and name

void onFragmentInteraction(Uri uri);

}

}

Listing broj 7. Sadržaj klase PretragaFragment

Analizom listinga koda broj 7 da se zaključiti da se u spomenutom fragmentu formiraju tri bitna

objekta: objekat tipa TextView koji će se koristiti kao taster za pokretanje fragmenta

StudentiDodavanjeFragment pozivom statičke metode displayView iz klase

MTIPStudentiMain, objekat tipa ImageView koji će se ponašati kao taster za aktiviranje

pretraga (EditText kontrola za unos prezimena za pretragu će biti formiran u narednoj vežbi

MTIPLab06), kao i objekat tipa Context koji se odnosi na fragment tj. aktivnost u kojem se isti

poziva. Unutar poziva metode onCreateView vidi se da se koristi layout fragment_pretraga.xml

na osnovu indentifikatora R.layout.fragment_pretraga i isti se formira putem inflater-a. Dalje

se instanciraju prethodno spomenuti objekti i dodelju se odgovarajući listeneri. Takođe, bitno je

napomenuti da se u fragmentu PregragaFragmet sakriva labela putem koje se može pozvati

fragment StudentDodavanjeFragment koji služi za dodavanje studenta. Alternativno, navedena

komponenta se može ukloniti i navedeno će biti demonstrirano u narednoj vežbi (MTIPLab06).

Sadržaj klase StudentFragment koja predstavlja fragment koji će prikazati klikom na stavku

menija Studenti prikazan je u listingu koda broj 8.

package rs.tfzr.mtipstudenti;

import android.app.AlertDialog;

import android.content.Context;

import android.content.DialogInterface;

import android.net.Uri;

import android.os.Bundle;

import android.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.ImageView;

import android.widget.TextView;

public class StudentiFragment extends Fragment {

// TODO: Rename parameter arguments, choose names that match

// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER

private static final String ARG_PARAM1 = "param1";

private static final String ARG_PARAM2 = "param2";

// TODO: Rename and change types of parameters

private String mParam1;

private String mParam2;

private OnFragmentInteractionListener mListener;

protected TextView _textViewDodajNovogStudenta;

Page 17: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

17

protected ImageView _imageViewPretraga;

protected Context _context;

public StudentiFragment() {

// Required empty public constructor

}

// TODO: Rename and change types and number of parameters

public static StudentiFragment newInstance(String param1, String param2) {

StudentiFragment fragment = new StudentiFragment();

Bundle args = new Bundle();

args.putString(ARG_PARAM1, param1);

args.putString(ARG_PARAM2, param2);

fragment.setArguments(args);

return fragment;

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

if (getArguments() != null) {

mParam1 = getArguments().getString(ARG_PARAM1);

mParam2 = getArguments().getString(ARG_PARAM2);

}

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// Inflate the layout for this fragment

View rootView = inflater.inflate(R.layout.fragment_pretraga, container,

false);

this._context = rootView.getContext();

this._textViewDodajNovogStudenta =

(TextView)rootView.findViewById(R.id.textViewDodajNovogStudenta);

this._textViewDodajNovogStudenta.setOnClickListener(new

View.OnClickListener() {

@Override

public void onClick(View view) {

MTIPStudentiMain.displayView(new

StudentiDodavanjeFragment(),MTIPStudentiMain._activity);

}

});

this._imageViewPretraga =

(ImageView)rootView.findViewById(R.id.imageViewPretraga);

this._imageViewPretraga.setOnClickListener(new View.OnClickListener() {

@Override

public void onClick(View view) {

AlertDialog.Builder builder = new

AlertDialog.Builder(getActivity());

builder.setMessage("Treba implementirati pretragu!!")

.setTitle("MTIP Studenti");

builder.setPositiveButton("OK", new

DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int id) {

}

});

AlertDialog dialog = builder.create();

dialog.show();

}

});

Page 18: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

18

return rootView;

}

// TODO: Rename method, update argument and hook method into UI event

public void onButtonPressed(Uri uri) {

if (mListener != null) {

mListener.onFragmentInteraction(uri);

}

}

@Override

public void onAttach(Context context) {

super.onAttach(context);

if (context instanceof OnFragmentInteractionListener) {

mListener = (OnFragmentInteractionListener) context;

} else {

throw new RuntimeException(context.toString()

+ " must implement OnFragmentInteractionListener");

}

}

@Override

public void onDetach() {

super.onDetach();

mListener = null;

}

public interface OnFragmentInteractionListener {

// TODO: Update argument type and name

void onFragmentInteraction(Uri uri);

}

}

Listing broj 8. Sadržaj klase StudentiFragment

Sadržaj fragmenta StudentiFragment gotovo je identičan sadržaju fragmenta

PretragaFragment s time što se labela (taster) za dodavanje studenta ne sakriva već se definiše

onClickListener za istu sa pozivom statičke metode displayView iz klase MTIPStudentiMain

uz prosleđivanje reference na instancu klase StudentiDodavanjeFragment. Na navedeni način,

klikom na prethodno spomenutu labelu, korisnik se preusmerava na fragment

StudentiDodavanjeFragment.

Sadržaj fragmenta StudentiDodavanjeFragment prikazan je u listingu koda broj 9.

package rs.tfzr.mtipstudenti;

import android.content.Context;

import android.net.Uri;

import android.os.Bundle;

import android.app.Fragment;

import android.view.LayoutInflater;

import android.view.View;

import android.view.ViewGroup;

import android.widget.Button;

import android.widget.LinearLayout;

import android.widget.TextView;

import org.w3c.dom.Text;

Page 19: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

19

public class StudentiDodavanjeFragment extends Fragment {

// TODO: Rename parameter arguments, choose names that match

// the fragment initialization parameters, e.g. ARG_ITEM_NUMBER

private static final String ARG_PARAM1 = "param1";

private static final String ARG_PARAM2 = "param2";

// TODO: Rename and change types of parameters

private String mParam1;

private String mParam2;

private OnFragmentInteractionListener mListener;

protected TextView _textViewDodavanjeLabela;

protected Context _context;

protected Button _btnPotvrdi;

protected Button _btnOdustani;

protected LinearLayout _linearLayoutIDStudenta;

protected LinearLayout _linearLauyoutMain;

public StudentiDodavanjeFragment() {

// Required empty public constructor

}

// TODO: Rename and change types and number of parameters

public static StudentiDodavanjeFragment newInstance(String param1, String

param2) {

StudentiDodavanjeFragment fragment = new StudentiDodavanjeFragment();

Bundle args = new Bundle();

args.putString(ARG_PARAM1, param1);

args.putString(ARG_PARAM2, param2);

fragment.setArguments(args);

return fragment;

}

@Override

public void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

if (getArguments() != null) {

mParam1 = getArguments().getString(ARG_PARAM1);

mParam2 = getArguments().getString(ARG_PARAM2);

}

}

@Override

public View onCreateView(LayoutInflater inflater, ViewGroup container,

Bundle savedInstanceState) {

// Inflate the layout for this fragment

View rootView =

inflater.inflate(R.layout.fragment_studenti_dodavanje_izmena, container, false);

this._context = rootView.getContext();

this._textViewDodavanjeLabela =

(TextView)rootView.findViewById(R.id.textViewStudentiNazivAkcije);

this._textViewDodavanjeLabela.setText("Dodavanje studenta");

this._linearLauyoutMain =

(LinearLayout)rootView.findViewById(R.id.dodavanjeIzmenaMainLinearLayout);

this._linearLayoutIDStudenta =

(LinearLayout)rootView.findViewById(R.id.linearLayoutIDStudenta);

this._linearLauyoutMain.removeView(this._linearLayoutIDStudenta);

this._btnPotvrdi = (Button)rootView.findViewById(R.id.buttonPotvrdi);

this._btnOdustani = (Button)rootView.findViewById(R.id.buttonOdustani);

this._btnOdustani.setOnClickListener(new View.OnClickListener() {

@Override

Page 20: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

20

public void onClick(View view) {

MTIPStudentiMain.displayView(new

StudentiFragment(),MTIPStudentiMain._activity);

}

});

return rootView;

}

// TODO: Rename method, update argument and hook method into UI event

public void onButtonPressed(Uri uri) {

if (mListener != null) {

mListener.onFragmentInteraction(uri);

}

}

@Override

public void onAttach(Context context) {

super.onAttach(context);

if (context instanceof OnFragmentInteractionListener) {

mListener = (OnFragmentInteractionListener) context;

} else {

throw new RuntimeException(context.toString()

+ " must implement OnFragmentInteractionListener");

}

}

@Override

public void onDetach() {

super.onDetach();

mListener = null;

}

public interface OnFragmentInteractionListener {

// TODO: Update argument type and name

void onFragmentInteraction(Uri uri);

}

}

Listing broj 9. Sadržaj klase StudentDodavanjeFragment

Analizom listinga koda broj 9 da se zaključiti da se u spomenutom fragmentu formiraju petoro

bitnih objekata: objekat tipa TextView koji će se koristiti kao labela i menjaće se tekst iste kako

bi se naznačilo da li se radi o formi za Dodavanje studenta ili Izmenu studenta, objekat tipa

Context koji se odnosi na fragment tj. aktivnost u kojem se isti poziva, dva objekta tipa Button

koji će se imati ulogu tastera za potvrđivanje akcije (btnPotvrdi) i odustajanje (btnOdustani)

od iste, dva objekta tipa LinearLayout. Jedan od navedenih LinearLayout objekta će referencirati

glavni layout fragmenta koji nosi identifikator R.id.dodavanjeIzmenaMainLinearLayout dok će

drugi referencirati LinearLayout sa identifikatorom R.id.linearLatoutIDStudenta kako bi se isti

mogao ukloniti pošto je navedeno polje za Dodavanje studenta nepotrebno, ali je za Izmenu

studenta potrebno pa se stoga koristi unutar fragmenta StudentiIzmenaFragment. Unutar poziva

metode onCreateView vidi se da se koristi layout fragment_studenti_dodavanje_izmena.xml

na osnovu indentifikatora R. fragment_studenti_dodavanje_izmena i isti se formira putem

inflater-a. Dalje se instanciraju prethodno spomenuti objekti i dodelju se odgovarajući listeneri.

Takođe, bitno je napomenuti da se tasteru za odustajanje od akcije dodeljuje onClickListener i

klikom na isti korisnik se preusmerava na fragment StudentiFragment.

Page 21: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

21

Slika broj 4. Fragment Pretraga studenata Slika broj 5. Dialog koji ukazuje da pretragu

studenata treba implementirati

Slika broj 6. Fragment Studenti Slika broj 7. Fragment Dodavanje studenta

Page 22: MTIPLab05 - 2017 - 2018 - PDF - R2.pdfkorisničkog interfejsa MTIP Studenti Android aplikacije kako bi se u narednoj vežbi (MTIPLab05) oformila veza spomenute aplikacije sa internetom

dr Predrag Pecev – Mobilne tehnologije i programiranje – Vežbe 2017 – 2018 – R2-

Podložno izmeni - Nerecenzirani materijal

22

Slika broj 8. Dialog koji ukazuje da upravljanje Studijskim smerovima treba implementirati

Ukoliko su svi koraci ove vežbe adekvatno ispraćeni MTIP Studenti Android aplikacija bi trebala

da se bez problema build-uje i pokrene na odabranom emulatoru. Na slikama broj 4, 5, 6, 7 i 8

prikazani su rezultati modifikacije aplikacije iz prethodne vežbe (MTIPLab04). Na slici broj 4

prikazan je izgled fragmenta Pretraga studenta, dok je na slici broj 5 prikazan dijalog koji ukazuje

da pretragu studenata treba implementirati. Slika broj 6 prikazuje fragment Studenti dok slika

broj 7 prikazuje fragment Dodavanje studenta. Slika broj 8 prikazuje dialog koji ukazuje da

upravljanje Studijskim smerovima treba implementirati