Kom i gang med Android-fragmenter

Jeg liker å lære nye ting, men jeg er ikke noen som stopper opp og refacterer hver app jeg noen gang har bygget bare fordi et nytt designmønster, widget eller paradigme er kunngjort. Jeg setter pris på prøvd og sann, og mens jeg prøver å holde øynene åpne og et øre mot bakken, foretrekker jeg en overbevisende grunn til å legge en ny hammer til min digitale verktøykasse.

Denne måten å gjøre ting på har satt meg på gjerdet om Android-fragmenter en stund. Jeg deltok på et par workshops om emnet, leste en rekke gode blogginnlegg om fragmenter (inkludert en av min andre TechRepublic-blogger Kyle Miller), og lærte at det er et kompatibilitets-API, og likevel har jeg vært treg med å hoppe på fragmentene tog.

Så for noen uker siden kjøpte jeg og begynte å bruke en Sony Tablet S. I løpet av noen dager begynte jeg å se appellen til fragmenter. Uten å ta noen bevisst beslutning om å gjøre det, fant jeg meg selv bort fra de appene som ikke støtter de intuitive fragmentbaserte layoutene. For rekorden inkluderer det alle appene jeg har kodet og gitt ut til markedet frem til dette tidspunktet.

Den erkjennelsen traff meg som mange tonn murstein. Jeg trakk den gamle bærbare datamaskinen, rullet opp ermene og begynte å utforske fragmenter for alvor. Det jeg raskt fant ut var at enkelhetsfragmentene gir sluttbrukeropplevelsen kommer til prisen for kompleksitet for utvikleren. Det er ok. På slutten av dagen har ikke anstrengelsen for å lage en app noen rolle, med mindre noen vil bruke det ferdige produktet. Jeg tenker at jeg får hodet rundt de viktigste implementeringskonseptene for fragmenter. Enda viktigere er at jeg blir solgt på ideen om fragmenter fremover.

Den følgende opplæringen er et fraskrevet fragmentbasert grensesnitt. Hvis du har tenkt på å gi fragment API en prøve i appene dine, er denne opplæringen noe for deg. Du kan følge med på eller laste ned prosjektet og importere det direkte til Eclipse.

1. Lag et nytt Android-prosjekt ved hjelp av Eclipse. Hvis du vil støtte fragmenter innfødt, må du målrette Android 3.0 (Honeycomb) eller nyere. Sørg for å endre navnet på oppstartsaktiviteten til Main.java.

2. For demoen bruker vi to oppsett: Én for å representere hovedbeholderen vår som inneholder de to fragmentene, og en andre for å definere detaljfragmentet vårt. Listefragmentet vil vi definere i kode ved å utvide den nyttige ListFragment-klassen. Legg til følgende oppsett i mappen / res / layout.

 main.xml 

"1.0" encoding = "utf-8" ?>

"Http://schemas.android.com/apk/res/android"

android: layout_width = "fill_parent"

android: layout_height = "fill_parent"

android: orientering = "horisontal" >

android: id = "@ + id / frag_series"

android: layout_width = "200dip"

android: layout_height = "match_parent"

android: layout_marginTop = "? android: attr / actionBarSize"

class = "com.authorwjf.hello_fragments.ListFrag" />

android: id = "@ + id / frag_capt"

android: layout_width = "match_parent"

android: layout_height = "match_parent"

class = "com.authorwjf.hello_fragments.DetailFrag" />

detail_fragment.xml

"1.0" encoding = "utf-8" ?>

"Http://schemas.android.com/apk/res/android"

android: layout_width = "match_parent"

android: layout_height = "match_parent"

android: orientering = "vertikal" >

android: id = "@ + id / kaptein"

android: layout_width = "wrap_content"

android: layout_height = "match_parent"

android: layout_gravity = "center_horizontal | center_vertical"

android: layout_marginTop = "20dip"

android: text = "Johnathan Archer"

android: textAppearance = "? android: attr / textAppearanceLarge"

android: textSize = "30dip" />

3. Vi er klare til å gå videre til kildemappen. Fordi fragmenter fungerer nesten som aktiviteter, gjør koden i Main.java ikke noe mer enn å laste den øverste utformingen.

 Main.java- pakke com.authorwjf.hello_fragments; import android.app.Aktivitet; import android.os.Bundle; offentlig klasse Hoved utvider aktivitet { 

@Overstyring

public void onCreate (Bundle savedInstanceState) { super .onCreate (savedInstanceState);

setContentView (R.layout. main );

}

}

4. Implementeringen av DetailFrag.java er nesten like enkel; den blåser opp en visning og eksponerer en setText-metode.

 DetaljFrag.java- pakke com.authorwjf.hello_fragments; import android.app.Fragment; import android.os.Bundle; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class DetailFrag utvider fragmentet { 

@Overstyring

public void onCreate (Bundle savedInstanceState) { super .onCreate (savedInstanceState);

}

@Overstyring

public void onActivityCreated (Bundle savedInstanceState) { super .onActivityCreated (savedInstanceState);

}

@Overstyring

offentlig visning onCreateView (LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {View view = inflater.inflate (R.layout. detail_fragment, container, false ); returvisning ;

}

public void setText (strengelement) {

TextView view = (TextView) getView (). FindViewById (R.id. Kaptein );

view.setText (pos);

}

}

5. Sist er ListFrag.java-filen. Vi oppretter en listevisning, implementerer klikk og bruker fragmentbehandleren for å referere til et fragment fra et annet. I metoden onListItemClick (), legg merke til sjekken for om målfragmentet finnes i denne spesielle layouten - som lar en utvikler implementere en egen layout for mindre skjermenheter som telefoner. Kanskje hvis dette innlegget genererer nok interesse, vil jeg gå tilbake og utvide denne opplæringen til å gjøre nettopp det.

 ListFrag.java- pakke com.authorwjf.hello_fragments; import android.app.ListFragment; import android.os.Bundle; import android.view.View; import android.widget.ArrayAdapter; import android.widget.ListView; public class ListFrag utvider ListFragment { 

@Overstyring

public void onCreate (Bundle savedInstanceState) { super .onCreate (savedInstanceState);

}

@Overstyring

public void onActivityCreated (Bundle savedInstanceState) { super .onActivityCreated (savedInstanceState); String Values ​​= new String {"Enterprise", "Star Trek", "Next Generation", "Deep Space 9", "Voyager"}; ArrayAdapter adapter = ny ArrayAdapter (getActivity (), android.R.layout. Simple_list_item_1, verdier);

setListAdapter (adapter);

}

@Overstyring

public void onListItemClick (ListView l, View v, int position, long id) {

String item = (String) getListAdapter (). GetItem (posisjon);

DetailFrag frag = (DetailFrag) getFragmentManager (). FindFragmentById (R.id. Frag_capt );

if (frag! = null && frag.isInLayout ()) {

frag.setText (getCapt (pos));

}

}

private String getCapt (String ship) { if (ship.toLowerCase (). inneholder ("enterprise")) { return "Johnathan Archer";

}

if (ship.toLowerCase (). inneholder ("star trek")) { return "James T. Kirk";

}

if (ship.toLowerCase (). inneholder ("neste generasjon")) { return "Jean-Luc Picard";

}

if (ship.toLowerCase (). inneholder ("deep space 9")) { return "Benjamin Sisko";

}

if (ship.toLowerCase (). inneholder ("voyager")) { return "Kathryn Janeway";

}

retur "???";

}

}

Vi er klare til å gjennomføre demoen. Hvis du eier et Android-nettbrett, kan du laste ned APK til enheten. Hvis ikke, kan du enkelt simulere et nettbrett ved å bruke ADB-pluginen for Eclipse og Android Virtual Device Manager ved å følge disse trinnene:

1. Lag en emulert enhet som kjører Android API nivå 11.

2. Still inn huden til 1280x800 piksler.

3. Bumpe opp enhetsrammen til 1024.

4. Still LCD-tettheten til 149.

Dette skal gi deg omtrent den samme opplevelsen som en første generasjons Motorola Xoom-enhet.

Der har du det - et rudimentært, men funksjonelt fragmentbasert brukergrensesnitt. Jo mer jeg graver meg i API, jo større forståelse får jeg for både fleksibiliteten og kraften til fragmenter.

Figur A

Figur B

Hvis du har tanker om eller erfaringer med Android-fragmenter, kan du dele dem med TechRepublic-samfunnet. Vi vil gjerne høre fra deg.

© Copyright 2020 | mobilegn.com