Android JetPack Hero |

Vad du kommer att lära dig

  • Du lär dig vad AndroidX är.
  • Du lär dig vad Navigation Component är.
  • Du lär dig hur du lägger till Navigering i AndroidX-projektet.
  • Du lär dig vad NavEditor, NavController och NavGraph är.

Slutligen lär du dig att överföra data mellan övergångar från ett fragment till ett annat med SafeArgs API som levereras med Navigation Component.

Vad är Navigation API?

Navigation API är en del av AndroidX (Android JetPack). Det hjälper till att hantera och implementera övergångar, oavsett från aktivitet till aktivitet, fragment till fragment eller aktivitet till fragment. Den är inspirerad av fladderens navigeringskontroller. Allt du behöver göra är att beskriva de rutter som din applikation går igenom i form av en navigationsgraf och Navigation API tar hand om resten. Navigation API innehåller också metoder för dataöverföring mellan fragment och lyssnare för att hantera fragmentövergångar.

Funktioner i Navigation API

  • Du behöver inte begära FragmentManager någon gång igen för övergång från ett fragment till ett annat.
  • Du behöver bara beskriva rutter, dvs. övergång; Som kan beskrivas i XML på WYSIWY-sätt med redigeringsverktyget för navigationsgraf.
  • Du behöver inte skriva fabriksmetoder för att skicka data från en start till destinationsskärm. Navigation API tillhandahåller SafeArgs API där du kan beskriva datatypen, dess namn och standardtyp.
  • Övergångsanimering kan skrivas in i själva navigationsgrafen.
  • Fragment och rutter implementerade med navigations API kan enkelt kopplas djupt med hjälp av djupa länkar API som finns i Navigation API.
  • Navigation API tillhandahåller också bakåtknappslyssnare i NavHostFragment vilket innebär att du inte längre måste upprepa fragmentbaksatsen varje gång för att avgöra vilket fragment som för närvarande är överst osv.

Terminologier för Navigation API

  • NavHost är ett aktivitetshotell-containerfragment, dvs NavHostFragment-innehåll som ersätts när användaren navigerar från en skärm till en annan skärm.
  • NavController är ett objekt i singleton-klassen som byggs under Gradle-byggprocessen precis som R-klassen. Den tillhandahåller alla metoder för att hantera navigering samt att passera argument.
  • Destinationsstart är den skärm där vi kan navigera till någon annan destination.
  • Destinationen är den skärm som vi reser till från början. En start kan ha flera destinationer beroende på scenarierna.
  • Platshållare är en tom behållare som du kan ersätta med ett fragment eller en aktivitet senare.

Navigationsredigerare

Navigationsredigeraren är en del av Android Studio version 3.3. Det är ett verktyg integrerat i studion för att redigera navigationsgraf på det du ser är vad du får (WYSIWYG).

Android Studio Navigationsredigerare |
  1. Destinationer är där du kan se alla fragment och aktiviteter som finns i navigationsgrafen. Det är uppdelat i två avsnitt, nämligen. NavHost och destinationer.
  2. Graph Editor är där du visuellt kan lägga till anslutningar mellan fragment. Här kan du definiera förhållandet mellan skärmar. Det liknar något men inte fullt ut som XCodes segmentredigerare.
  3. Attributredaktör eller inspektör är där vi kan redigera alla slags egenskaper angående övergångar. Till exempel att lägga till argumentlista för denna övergång, övergångsanimationer och DeepLinks.

Implementering av Navigation API

I den här artikeln kommer vi att göra en enkel applikation med hjälp av navigations-API för att smaka på det. Men vi kommer att hålla det enkelt. Vår provapplikation kommer att bestå av två fragment och en huvudaktivitet. Huvudfragmentet innehåller två knappar, en knapp navigerar helt enkelt till det andra fragmentet medan den andra knappen skickar datumsträng till det andra fragmentet.

Steg 1: Lägg till Navigation Resource Directory

Skapa ett nytt Android Studio-projekt med AndroidX (se till att du har den senaste versionen av studion) och välj Kotlin under språkfliken. När Gradle är klar med att konfigurera projektet lägg till två fragment till projektet; En kommer att fungera som NavHost, och en annan är destinationsfragment.

  • Högerklicka på resursmappen (res) och lägg till en ny Android Resource Directory . I katalogtyp väljer du navigering och klickar på OK. En ny katalog med namnet läggs till i resurskatalogen.
  • Högerklicka på navigeringsresursskatalogen och lägg till en ny XML- resurskatalognamn för den här filen nav_graph.xml .
  • Dubbelklicka för att öppna den här filen. Android Studio startar navigationsredigeraren automatiskt.

Projekt med Kotlin och AndroidX |

Steg 2: Lägg till fragment i NavEditor

Nu när vi har filen nav_graph.xml öppnad i navigeringsredigeraren. Låt oss lägga till fragment i navigationsredigeraren.

  • Gå till det övre vänstra hörnet av menyraden i navigationsredigeraren och klicka på det gröna plustecknet. En undermeny visas med en lista över fragment och aktiviteter som finns i projekten.
  • Välj alla skärmar som finns i listan (endast fragment) och lägg till dem i navigationsredigerarens destinationsfält.

Lägga till destinationer |

Steg 3: Lägg till övergångar

Nu när vi har lagt till fragment på destinationer. Vi har två uppgifter kvar att utföra, dvs att välja en NavHost-controller och länka destinationerna med start. Jag antar att du har två fragment i projektet, nämligen. MainMenu-fragment och andra fragment och MainActivity. Lägg till följande kod i layoutfilen Activity_main.xml.

Navigera till navigeringsredigeraren igen, se skillnaden? Den tidigare tömda värdsektionen är fylld med aktivitet_main .

  • Högerklicka på mainMenu-fragmentet i destinationerna och välj Destination Start .
  • Klicka på sidan av mainMenu-cirkeln och dra pekaren till secondFragment och anslut dem båda.

Steg 4: Lägg till övergångsutlösare

Nu när vi har slutfört den länkande delen, är det enda som återstår att lägga till triggers för att köra övergångarna. Gå till mainMenu-fragmentet (med två knappar) lägg till klicklyssnare till någon från dem. Vi lägger till kod i clickListener för att utföra övergången. Kompilera och köra applikationen. Klicka på den knappen och se övergången hända. Om det inte fungerade, försök dock att kommentera ditt problem nedan, jag hjälper dig.

 // kotlin åsidosätter fun onViewCreated (visa: Visa, sparadInstanceState: Bundle?) {super.onViewCreated (visa, sparadInstanceState) // btFirst är id för knappvisningen.btFirst.setOnClickListener {// Navigation Controller Navigation.findNavController (view). (R.id.secondFragment)}} 

Steg 5: Skicka data med NavController

Navigations-API som jag sa tidigare innehåller också data som överför API som kallas SafeArgs. Du kan använda detta API eller skicka data med paketet. Vi kommer bara att implementera SafeArgs i den här artikeln.

  • Gå till navigationsredigeraren i (föregående exempel) och välj secondFragment.
  • Gå till inspektören till höger i navigationsredigeraren och klicka på '+' strax efter argumentlistan.
  • En ny dialog kommer att visas, ge standardvärdet "Hej världen" eller vad du vill och namn- argument . Lämna typ till .
Lägg till dialogrutan |

Gå till projektets toppnivå build.gradle- fil och lägg till följande beroenden.

 buildcript {... beroende {// Lägg till denna klassväg "android.arch.navigation: navigation-safe-args-gradle-plugin: 1.0.0-alpha11"}} 

Lägg till följande beroenden i modulenivå build.gradle och synkronisera projektet.

 // Lägg till denna rad överst tillämpa plugin: 'kotlin-android-extensions' applicera plugin: 'androidx.navigation.safeargs' beroenden {// Lägg till detta i beroendeframställningen 'android.arch.navigation: navigation-fragment: 1.0 .0-alpha11 '} 

Steg 6: Skicka data med SafeArgs

I MainMenu-fragment där du lägger till två knappar, i den andra knappen (den som lyssnaren ännu inte har tilldelat). Lägg nu till följande kod för att gå längs datumsträngen till nästa skärm.

 //MainMenuFragment.kt åsidosätter kul påViewCreated (visa: Visa, sparadInstanceState: Bundle?) {Super.onViewCreated (visa, sparadInstanceState) view.btFirst.setOnClickListener {Navigation.findNavController (visa) .navigate (R.id)} view .btSecond.setOnClickListener {/ * -handlingen beskriver en övergång MainMenuDirection är en autogenererad klass. Namngivningen följer som [DestinationStartClass's Name] Vägbeskrivning, till exempel om klassens namn är Hem, kommer du att sluta med HomeDirections. * / val action = MainMenuDirections.actionMainMenuToSecondFragment () action.argument = "Idag är" + SimpleDateFormat ("dd / mm / åååå", Locale.getDefault ()) .format (Datum ()) Navigation.findNavController (visa) .navigate (åtgärd)}} 

Steg 7: Hämta data från SafeArgs

I ett annat fragment eller destinationsfragment måste vi lägga till kod för att hämta argumentet eller data i det andra fragmentet. Varje destinationsfragment innehåller ett argumentpaket som kontrolleras av NavController. Återigen genereras en klass automatiskt för destinationsfragment. Om namnet på fragmentfragment är SecondFragment kommer den auto-genererade klassen att ha namnet SecondFragmentArgs. Nedan är kod för att hämta argumentet (argumentnamn är ironiskt sett argument med strängtyp).

 //SecondFragment.kt åsidosätter kul påViewCreated (visa: Visa, sparadInstansstat: Bundle?) {Super.onViewCreated (visa, sparadInstansstat) val args = SecondFragmentArgs.fromBundle (argument !!) view.tvArgs.text = args.argument} 

Slutsats

Detta var en kort introduktion till Navigation API. I min nästa artikel kommer jag att skriva om rum api. Room api är för att snabbt vidarebefordra implementeringen av SQLHandler och databashantering med uthållighet. Om du stötte på fel kan du försöka googla problemen eller kommentera det nedan. Följ och dela. Tack för att du läste. Källkod för slutlig ansökan finns här.

Den här artikeln är korrekt och sant efter bästa författares kunskap. Innehållet är endast för informations- eller underhållningsändamål och ersätter inte personlig rådgivning eller professionell rådgivning i affärs-, finansiella, juridiska eller tekniska frågor.