Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Google IO Extended: Android JetPack: Navigation Component

Google IO Extended: Android JetPack: Navigation Component

A brief overview of the Navigation Component presented at Google IO Extended at the Google office in Berlin.

Ash Davies

May 07, 2019
Tweet

More Decks by Ash Davies

Other Decks in Programming

Transcript

  1. Android JetPack
    Navigation Component
    @askashdavies

    View Slide

  2. @askashdavies

    View Slide

  3. @askashdavies

    View Slide

  4. !
    @askashdavies

    View Slide

  5. "Once we have gotten in to this entry-point to
    your UI, we really don't care how you organise the
    flow inside."
    — Dianne Hackborn, Android Framework team
    @askashdavies

    View Slide

  6. !
    @askashdavies

    View Slide

  7. View Slide

  8. JetPack: Navigation
    @askashdavies

    View Slide

  9. JetPack: Navigation
    • Libraries
    !
    • Plugin
    "
    • Tooling
    #
    @askashdavies

    View Slide

  10. • Fragment transactions
    • Up and back actions
    • Standardised transition resources
    • Deep link implementation
    • Easy navigation patterns
    • Type safe arguments
    @askashdavies

    View Slide

  11. Principles of Navigation
    @askashdavies

    View Slide

  12. JetPack: Navigation
    @askashdavies

    View Slide

  13. Navigation Graph
    @askashdavies

    View Slide

  14. View Slide

  15. NavHostFragment
    android:id="@+id/nav_host_fragment"
    android:name="androidx.navigation.fragment.NavHostFragment"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:defaultNavHost="true"
    app:navGraph="@navigation/nav_graph" />
    @askashdavies

    View Slide

  16. NavController
    • Fragment.findNavController()
    • View.findNavController()
    • Activity.findNavController(viewId: Int)
    @askashdavies

    View Slide

  17. !
    SafeArgs
    @askashdavies

    View Slide

  18. SafeArgs: Directions
    MainFragmentDirections.mainToViewBalance()
    android:id="@+id/fragmentMain"
    android:name="com.google.sample.MainFragment"
    android:label="@string/main_title"
    tools:layout="@layout/main_fragment">
    android:id="@+id/mainToViewBalance"
    app:destination="@+id/fragmentViewBalance"/>

    @askashdavies

    View Slide

  19. SafeArgs: Directions
    android:id="@+id/fragmentViewBalance"
    android:name="com.google.sample.ViewBalanceFragment"
    android:label="@string/view_balance_title"
    tools:layout="@layout/view_balance_fragment">
    android:name="balanceAmount"
    app:argType="integer"/>

    @askashdavies

    View Slide

  20. SafeArgs: Args
    class MainFragment: Fragment() {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    viewTransactionsButton.setOnClickListener { view ->
    MainFragmentDirections.mainToViewBalance(100)
    }
    }
    }
    class ViewBalanceFragment : Fragment() {
    override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
    super.onViewCreated(view, savedInstanceState)
    val args = ViewBalanceFragmentArgs.fromBundle(arguments!!)
    balance.setText(String.format("%.2d", args.balanceAmount))
    }
    }
    @askashdavies

    View Slide

  21. SafeArgs: Getting Started
    buildscript {
    repositories {
    google()
    }
    dependencies {
    classpath "androidx.navigation:navigation-safe-args-gradle-plugin:2.0.0"
    }
    }
    apply plugin: 'androidx.navigation.safeargs.kotlin'
    @askashdavies

    View Slide

  22. !
    Migrating
    @askashdavies

    View Slide

  23. !
    Migrating
    • Move screen behaviour away from activities
    • Create new activity for NavHostFragment
    • Move existing activity logic to fragment
    • Initialise fragment in host activity
    • Pass arguments as necessary
    • Create navigation graph
    • Profit
    @askashdavies

    View Slide

  24. !
    Scoping
    @askashdavies

    View Slide

  25. @askashdavies

    View Slide

  26. @askashdavies

    View Slide

  27. Ian Lake: Single Activity: Why, When, and How
    bit.ly/2Jo94x9

    View Slide

  28. Thanks!
    bit.ly/2V6HZk4
    @askashdavies

    View Slide