Waarom fragmenten en wanneer fragmenten gebruiken in plaats van activiteiten?

In Android API 11+ heeft Google een nieuwe klasse uitgebracht met de naam Fragment.

In de video’s suggereert Google dat waar mogelijk (link1, link2), zouden we fragmenten moeten gebruiken in plaats van activiteiten, maar ze legden niet precies uit waarom.

Wat is het doel van fragmenten en sommige mogelijke toepassingen ervan (behalve enkele UI-voorbeelden die gemakkelijk kunnen worden bereikt door eenvoudige weergaven/lay-outs)?

Mijn vraag gaat over fragmenten:

  1. Wat zijn de doelen van het gebruik van een fragment?
  2. Wat zijn de voor- en nadelen van het gebruik van fragmenten in vergelijking met het gebruik van activiteiten/weergaven/lay-outs?

Bonusvragen:

  1. Kun je een aantal echt interessante toepassingen voor fragmenten geven? Dingen die Google niet vermeldde in hun video’s?
  2. Wat is de beste manier om te communiceren tussen fragmenten en de activiteiten die ze bevatten?
  3. Wat zijn de belangrijkste dingen om te onthouden als je fragmenten gebruikt? Tips en waarschuwingen uit uw ervaring?

Antwoord 1, autoriteit 100%

#1 & #2 wat zijn de doelen van het gebruik van een fragment & wat zijn de
voor- en nadelen van het gebruik van fragmenten in vergelijking met het gebruik van
activiteiten/weergaven/lay-outs?

Fragments zijn Android’s oplossing voor het maken van herbruikbare gebruikersinterfaces. U kunt een aantal van dezelfde dingen bereiken met activiteiten en lay-outs (bijvoorbeeld door include te gebruiken). Echter; fragmenten zijn aangesloten op de Android API, vanaf HoneyComb en hoger. Laat het me uitleggen;

  • De ActionBar. Als je tabs daarboven wilt hebben om door je app te navigeren, zie je snel dat de ActionBar.TabListener-interface je een FragmentTransactiongeeft als invoerargument voor de onTabSelectedmethode. Je zou dit waarschijnlijk kunnen negeren en iets anders en slims kunnen doen, maar je zou tegen de API werken, niet ermee.

  • De FragmentManagerhandelt op een zeer slimme manier «terug» voor u af. Terug betekent niet terug naar de laatste activiteit, zoals bij reguliere activiteiten. Het betekent terug naar de vorige fragmentstatus.

  • Je kunt de coole ViewPagergebruiken met een FragmentPagerAdapterom veeginterfaces te maken. De FragmentPagerAdapter-code is veel schoner dan een gewone adapter en controleert de instantiaties van de afzonderlijke fragmenten.

  • Uw leven wordt een stuk eenvoudiger als u Fragments gebruikt wanneer u toepassingen probeert te maken voor zowel telefoons als tablets. Omdat de fragmenten zo verbonden zijn met de Honeycomb+ API’s, wil je ze ook op telefoons gebruiken om code opnieuw te gebruiken. Dat is waar de compatibiliteitsbibliotheek van pas komt.

  • Je zou zelfs fragmenten kunnen en moeten gebruiken voor apps die alleen voor telefoons zijn bedoeld. Als u draagbaarheid in gedachten heeft. Ik gebruik ActionBarSherlocken de compatibiliteitsbibliotheken om “ICS-achtige” apps te maken, die er vanaf versie 1.6 hetzelfde uitzien. U krijgt de nieuwste functies zoals de ActionBar, met tabbladen, overloop, gesplitste actiebalk, viewpager enz.

Bonus 2

De beste manier om tussen fragmenten te communiceren zijn intenties. Wanneer u op iets in een fragment drukt, roept u gewoonlijk StartActivity()aan met gegevens erop. De intentie wordt doorgegeven aan alle fragmenten van de activiteit die je start.


Antwoord 2, autoriteit 23%

Ik weet niet zeker naar welke video(‘s) je verwijst, maar ik betwijfel of ze zeggen dat je fragmenten moet gebruiken in plaats van activiteiten, omdat ze niet direct uitwisselbaar zijn. Er is eigenlijk een vrij gedetailleerd itemin de Dev Guide, overweeg deze te lezen voor details.

Kortom, fragmenten leven in activiteiten en elke activiteit kan vele fragmenten bevatten. Net als activiteiten hebben ze een specifieke levenscyclus, in tegenstelling tot activiteiten zijn het geen applicatiecomponenten op het hoogste niveau. Voordelen van fragmenten zijn onder meer hergebruik van code en modulariteit (bijvoorbeeld dezelfde lijstweergave gebruiken bij veel activiteiten), inclusief de mogelijkheid om interfaces met meerdere panelen te bouwen (meestal handig op tablets). Het grootste nadeel is (enige) toegevoegde complexiteit. Over het algemeen kun je hetzelfde bereiken met (aangepaste) views op een niet-standaard en minder robuuste manier.


Antwoord 3, autoriteit 18%

Een fragment is een onderdeel van de gebruikersinterface of het gedrag van een applicatie dat in een activiteit kan worden geplaatst, waardoor een meer modulair activiteitenontwerp mogelijk is. Het is niet verkeerd als we zeggen dat een fragment een soort subactiviteit is.

Hier volgen belangrijke punten over een fragment:

  1. Een fragment heeft zijn eigen lay-out en zijn eigen gedrag met zijn eigen lifecycle-callbacks.

  2. Je kunt fragmenten in een activiteit toevoegen of verwijderen terwijl de activiteit actief is.

  3. Je kunt meerdere fragmenten combineren in één activiteit om een gebruikersinterface met meerdere panelen te bouwen.

  4. Een fragment kan bij meerdere activiteiten worden gebruikt.

  5. De levenscyclus van het fragment hangt nauw samen met de levenscyclus van zijn gastheeractiviteit.

  6. Als de activiteit wordt onderbroken, worden alle fragmenten die beschikbaar zijn in de activiteit ook gestopt.

  7. Een fragment kan gedrag implementeren dat geen gebruikersinterfacecomponent heeft.

  8. Fragmenten zijn toegevoegd aan de Android API in Android 3( Honeycomb) met API-versie 11.

Ga voor meer informatie naar de officiële site, Fragments.


Antwoord 4, autoriteit 9%

Dit is belangrijke informatie die ik op fragmenten heb gevonden:

In het verleden werd elk scherm in een Android-app geïmplementeerd als een afzonderlijke activiteit. Dit zorgt voor een uitdaging bij het doorgeven van informatie tussen schermen, omdat het Android Intent-mechanisme niet toestaat dat een referentietype (d.w.z. object) rechtstreeks tussen activiteiten wordt doorgegeven. In plaats daarvan moet het object worden geserialiseerd of moet een wereldwijd toegankelijke referentie beschikbaar worden gesteld.

Door van elk scherm een apart fragment te maken, bezorgt deze data hoofdpijn
wordt volledig vermeden. Fragmenten bestaan altijd in de context van a
gegeven Activiteit en heeft altijd toegang tot die Activiteit. Door de op te slaan
informatie van belang binnen de Activiteit, het Fragment voor elk
scherm heeft eenvoudig toegang tot de objectreferentie via de Activiteit.

Bron: https://www.pluralsight.com/blog/software- development/android-fragmenten


Antwoord 5, autoriteit 8%

Activiteiten zijn de volledige schermcomponenten in de app met de werkbalk, al het andere zijn bij voorkeur fragmenten.
Eén bovenliggende activiteit op volledig scherm met een werkbalk kan meerdere vensters, schuifbare pagina’s, dialoogvensters, enz. (alle fragmenten) hebben, die allemaal toegankelijk zijn vanaf de ouder en communiceren via de ouder.

Voorbeeld:

Activiteit A, Activiteit B, Activiteit C:

  • Alle activiteiten moeten dezelfde code herhaald hebben om een basis te tonen
    werkbalk bijvoorbeeld, of erven van een bovenliggende activiteit (wordt
    omslachtig om te beheren).
  • Om van de ene activiteit naar de andere te gaan, moeten ze ofwel allemaal in het geheugen staan (overhead) of de ene moet worden vernietigd voordat de andere kan worden geopend.
  • Communicatie tussen activiteiten kan via Intents.

vs

Activiteit A, Fragment 1, Fragment 2, Fragment 3:

  • Geen codeherhaling, alle schermen hebben werkbalken enz. van die ene activiteit.
  • Verschillende manieren om van het ene fragment naar het volgende te gaan – bekijk pager, meerdere panelen, enz.
  • Activiteit heeft de meeste gegevens, dus er is minimale communicatie tussen fragmenten nodig. Indien nog nodig, kan eenvoudig via interfaces worden gedaan.
  • Fragmenten hoeven niet volledig scherm te zijn, veel flexibiliteit bij het ontwerpen ervan.
  • Fragmenten hoeven de lay-out niet op te blazen als weergaven niet nodig zijn.
  • Verschillende activiteiten kunnen hetzelfde fragment gebruiken.

Antwoord 6, autoriteit 3%

Fragmenten zijn in sommige gevallen van bijzonder nut, zoals wanneer we een navigatielade op al onze pagina’s willen behouden. Je kunt een framelay-out opblazen met elk fragment dat je wilt en toch toegang hebben tot de navigatielade.

Als je een activiteit had gebruikt, had je de lade in alle activiteiten moeten houden, wat voor redundante code zorgt. Dit is een interessant gebruik van een fragment.

Ik ben nieuw bij Android en denk nog steeds dat een fragment op deze manier nuttig is.


Antwoord 7, autoriteit 2%

Ik weet dat dit al ter dood is besproken, maar ik wil nog wat meer punten toevoegen:

  • Frags kunnen worden gebruikt om Menu‘s te vullen en kunnen zelfstandig MenuItem-klikken aan. Zo krijgt u nog meer modulatiemogelijkheden voor uw activiteiten. Je kunt ContextualActionBar-dingen enzovoort doen zonder dat je Activiteit hiervan op de hoogte is en je kunt het in feite loskoppelen van de basisdingen die je Activiteit afhandelt (Navigatie/Instellingen/Over).

  • Een ouder Frag met kind Frags kan je verdere opties geven om je componenten te moduleren. bijv. je kunt Frags gemakkelijk verwisselen, nieuwe Frags in een Pager plaatsen of ze verwijderen, herschikken. En dat allemaal zonder dat je Activiteit er iets van af weet, je hoeft je alleen maar te concentreren op dingen op een hoger niveau.


Antwoord 8

Een fragment leeft binnen een activiteit, terwijl een activiteit op zichzelf leeft.


Antwoord 9

Fragments leeft binnen de Activiteit en heeft:

  • zijn eigen levenscyclus
  • zijn eigen lay-out
  • zijn eigen onderliggende fragmenten en dergelijke.

Beschouw Fragmenten als een subactiviteit van de hoofdactiviteit waartoe het behoort, het kan niet op zichzelf bestaan en het kan keer op keer worden aangeroepen/hergebruikt. Ik hoop dat dit helpt 🙂


Antwoord 10

1. Doelen van het gebruik van een fragment?

  • Antwoord:
    1. Omgaan met verschillen in vormfactor van apparaten.
    2. Informatie doorgeven tussen app-schermen.
    3. Organisatie gebruikersinterface.
    4. Geavanceerde UI-metaforen.

Antwoord 11

Fragmentkan worden gezien als niet-rootcomponenten in een samengestelde boom van ui-elementen, terwijl activiteiten bovenaan staan in het bos van composieten (ui-bomen).

  • Een vuistregel voor wanneer nietFragmentmoet worden gebruikt, is wanneer het fragment als kind een conflicterend kenmerk heeft, bijv. het kan meeslepend zijn of samen een andere stijl gebruiken of een ander architectonisch / logisch verschil hebben en niet homogeenin de bestaande boom passen.

  • Een vuistregel voor wanneer u Activityboven Fragmentmoet verkiezen, is wanneer de taak (of reeks samenhangende taken) volledig onafhankelijk en herbruikbaar is en iets doet zwaar gewicht tillen en mag niet verder worden belast om te voldoen aan een ander ouder-kind-composiet (SRP-overtreding, tweede verantwoordelijkheid zou zijn om te voldoen aan het composiet). Voor bijvoorbeeld een MediaCaptureActivitydie audio, video, foto’s enz. vastlegt en bewerkingen, ruisverwijdering, annotaties op foto’s enz. mogelijk maakt. Deze activiteit/module kan onderliggende fragmenten bevatten die gedetailleerder werk doen en voldoen aan een algemeen weergavethema.

Other episodes