Video: Learning iOS: Create your own app with Objective-C! by Tianyu Liu 2024
Brukergrensesnittet i Android-appeksemplet som brukes her, har tre paneler - en liste over elementer, et detaljpanel som beskriver hvilket element som er valgt i listen, og et detaljer-i-dybde panel. På en liten smarttelefon skjerm, kan hvert panel være en egen aktivitet. Men en tavleskjermer i liggende modus har plass til flere enn ett panel.
Bildet under viser denne appen med to av de tre panelene. Panelet til venstre viser en liste over Android SDK-komponenter. Panelet til høyre viser en beskrivelse av hvilken komponent som er valgt i listen til venstre. (Beskrivelsen er egentlig de første setningene i komponentens SDK-dokumentasjon.) Dette detaljer-på-høyre mønsteret er en del av mange brukergrensesnitt.
For å lage skjermbildet, bygger du en aktivitet. Aktiviteten har to fragmenter - et fragment til venstre og et annet til høyre. Det venstre panelet viser det samme fragmentet i løpet av appen, slik at du kan deklarere det fragmentet i aktivitetens layoutfil. Det høyre panelet viser ett fragment om gangen, men fragmentet endres i løpet av appen. Så du erklærer en rammeoppsett i høyre panel.
I koden ovenfor deler android: layout_ uansett attributter opp skjermen i to halvdeler - en halv for fragmentelementet og den andre halvdelen for FrameLayout-elementet. Strategien med disse attributter er å starte ved å tildele et minimum på null piksler for hvert element. Selvfølgelig betyr nullpiksler ingen bredde i det hele tatt (som er den samme som usynlig). For å holde de to halvdelene av oppsettet usynlig, tilordne lik nullverdier til de to halvdelene. Med ikke-null vektverdier, utvides hver halvdel for å fylle ledig plass i oppsettet.
Bruken av fragmentets fullt kvalifiserte klassenavn (com. Allmycode. Frag. ComponentNamesFragment) er forsettlig. Et forkortet navn (som. ComponentNamesFragment) vil ikke kutte sennep.
Hvis du lurer på, er Android-innebygde detaljerElementBackground et jevnt utseende for ting som den høyre halvdelen (ting som viser detaljer om et element som brukeren har valgt).
Appens hovedaktivitetskode er imponerende uinteressant.
pakke com. allmycode. frag; importere android. app. Aktivitet; importere android. os. Bunt; offentlig klasse AllPurposeActivity utvider Aktivitet {@Override protected void onCreate (Bundle savedInstanceState) {super. onCreate (savedInstanceState); setContentView (R.oppsett. hoved);}}
Koden nedenfor inneholder klassen ComponentNamesFragment. På grunn av oppsettet i det første eksemplet, installerer Android et ComponentNamesFragment på venstre side av enhetens skjerm.
pakke com. allmycode. frag; importere android. app. FragmentManager; importere android. app. FragmentTransaction; importere android. app. ListFragment; importere android. os. Bunt; importere android. utsikt. Utsikt; importere android. widget. ArrayAdapter; importere android. widget. Listevisning; offentlig klasse ComponentNamesFragment utvider ListFragment {endelig statisk streng [] COMPONENTS = {"Activity", "Service", "BroadcastReceiver", "ContentProvider"}; @Override public void onActivityCreated (Bundle savedInstanceState) {super. onActivityCreated (savedInstanceState); SetListAdapter (newAviceAdaptor (GetActivity (), android.Reformat. simple_list_item_1, COMPONENTS))} @Override public void onListItemClick (Listevisning l, Vis v, int indeks, lang id) {// Opprett fragment med indeks DocsFragment docsFragment = ny DocsFragment (); Bundle args = Helper. getBundleWithIndex (index); docsFragment. setArguments (args); // Fjern ryggstakken FragmentManager fragmentManager = getFragmentManager (); int backStackEntryCount = fragmentManager. getBackStackEntryCount (); for (int i = 0; iKlassen i koden ovenfor utvider Android's ListFragment-klasse. En ListFragment er et fragment som viser en liste. Tidlig i fragmentets livssyklus setter koden i eksemplet ovenfor en listeadapter (mer spesifikt en ArrayAdapter) for fragmentet. Så hvor tidlig er "tidlig"?
ArrayAdapter-konstruktørens første parameter er en kontekst. Men vent! I motsetning til en aktivitet er et fragment ikke en kontekst. Så du kan ikke bruke søkeordet dette til ArrayAdapter-konstruktørens første parameter.
Heldigvis har et fragment en getActivity-metode. Et kall til getActivity tar tak i aktiviteten som fragmentet er knyttet til. Så, for ArrayAdapter-konstruktørens første parameter, kan du ringe getActivity. Selvfølgelig kan du ikke ringe getActivity til fragmentet er knyttet til en eksisterende aktivitet. Derfor er fragmentets onActivityCreated-metode overstyrt ovenfor. Android samtaler onActivityCreated etter å ha vedlagt fragmentet og kalt aktivitetens onCreate-metode. Så alt fungerer som planlagt.
Android. app. Aktivitetsklassens besteforeldresklasse er android. innhold. Kontekst. Men android. app. Fragment klassens foreldre klasse er vanlig gammel java. Lang. Gjenstand. Derfor, i en aktivitets kode, refererer søkeordet til en kontekst. Men i et fragments kode refererer ikke søkeordet til en kontekst.
I eksemplet ovenfor har konstruktøren for ArrayAdapter tre parametere.
Den første parameteren er konteksten - den ekle parameteren som tvinger deg til å sette konstruktøren inne i onActivityCreated-metoden.
Den andre parameteren er simple_list_item_1 - en standard Android-oppsett.
Layoutet simple_list_item_ 1 skaper utseendet du ser på venstre side av bildet. Android har mange av disse standardoppsettene. For en oversikt over tilgjengelige layouter, besøk Android Developer-nettstedet.
Den tredje parameteren er samlingen av elementer som vil vises i listen.
I dette eksemplet kommer disse elementene fra COMPONENTS array, som er deklarert i samme eksempel.
Som en ListActivity har en ListFragment en onListItemClick-metode. Du kan svare på et klikk ved å jobbe med en DocsFragment, en FragmentTransaction og en FragmentManager:
DocsFragment representerer høyre side av bildet ovenfor.
En fragmenttransaksjon er en masse ting du gjør med fragmenter. For eksempel, å sette opp for å erstatte ett fragment med en annen er en transaksjon.
En fragment manager gjør hva navnet antyder. Den styrer fragmenters ankomster og avganger.