Who I am - @mbonifazi
● Android developer since Eclair
● GDE...what else? A high carb
addicted
● I hate MS Office & Jira notifications
My best quote: Day by day is the best way
https://androiddevs.it/
Headlines
➔ How we were & are
● How we wanna be
● How we apply best practices
Google+: https://plus.google.com/+DianneHackborn/posts/FXCCYxepsDU
Activity
added in API level 1
val intent = Intent(this, DisplayMessageActivity::class.java).apply {
putExtra(EXTRA_MESSAGE, message)
}
startActivity(intent)
<activity
android:name="com.example.android.GizmosActivity"
android:label="@string/title_gizmos" >
<intent-filter android:label="@string/filter_view_http_gizmos">
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="https"
android:host="www.example.com"
android:pathPrefix="/gizmos" />
</intent-filter>
Fragment
added in API level 11
Deprecated since API level 28
companion object {
@JvmStatic
fun newInstance(param1: String, param2: String) =
BlankFragment().apply {
arguments = Bundle().apply {
putString(ARG_PARAM1, param1)
putString(ARG_PARAM2, param2)
}
}
}
val detailsFragment = DetailsFragment.newInstance(comic)
supportFragmentManager.beginTransaction()
.replace(R.id.root_layout, detailsFragment, "rageComicDetails")
.addToBackStack(null)
.commit()
Headlines
● How we were & are
➔ How we wanna be
● How we apply Best practices
Android Jetpack
Principles of Navigation
Back button Up button
def nav_version = "1.0.0-alpha05"
implementation "android.arch.navigation:navigation-fragment-ktx:$nav_version"
implementation "android.arch.navigation:navigation-ui-ktx:$nav_version"
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
app:startDestination="@+id/home_dest">
<!-- ...tags for fragments and activities here -->
</navigation>
Destinations
<fragment
android:id="@+id/flow_step_one_dest"
android:name=".navigation.FlowStepFragment"
tools:layout="@layout/flow_step_one_fragment">
</fragment>
<LinearLayout>
<androidx.appcompat.widget.Toolbar/>
<fragment
………...
android:id="@+id/my_nav_host_fragment"
android:name="androidx.navigation.fragment.NavHostFragment"
app:navGraph="@navigation/mobile_navigation"
app:defaultNavHost="true"
/>
<com.google.android.material.bottomnavigation.BottomNavigationView/>
</LinearLayout>
Action
<fragment
android:id="@+id/flow_step_one_dest"
android:name=".navigation.FlowStepFragment">
<action
android:id="@+id/next_action"
app:destination="@+id/flow_step_two_dest">
</action>
</fragment>
NavController
findNavController().navigate(R.id.flow_step_one_dest)
findNavController().navigate(R.id.nextAction)
val options = navOptions {
anim {
enter = R.anim.slide_in_right
exit = R.anim.slide_out_left
popEnter = R.anim.slide_in_left
popExit = R.anim.slide_out_right
}
}
view.findViewById<Button>(R.id.navigate_destination_button)?.setOnClickListener {
findNavController().navigate(R.id.flow_step_one_dest, null, options)
}
apply plugin: 'androidx.navigation.safeargs'
<fragment
android:id="@+id/flow_step_one_dest"
android:name="com.example.android.codelabs.navigation.FlowStepFragment"
tools:layout="@layout/flow_step_one_fragment">
<argument
android:name="flowStepNumber"
app:argType="integer"
android:defaultValue="1"/>
...
</fragment>
val flowStepNumber = arguments?.getInt("flowStepNumber")
val safeArgs = FlowStepFragmentArgs.fromBundle(arguments)
val flowStepNumber = safeArgs.flowStepNumber
Deep linking
<fragment
android:id="@+id/flow_step_one_dest"
android:name="com.example.android.codelabs.navigation.FlowStepFragment"
tools:layout="@layout/flow_step_one_fragment">
…..
<deepLink app:uri="www.example.com/{myarg}" />
</fragment>
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
<nav-graph android:value="@navigation/mobile_navigation" />
</activity>
Headlines
● How we were & are
● How we wanna be
➔ How we apply best practices
References
● https://github.com/googlesamples/android-sunflower
● https://www.youtube.com/watch?v=2k8x8V77CrU
● https://www.youtube.com/watch?v=7p22cSzniBM
● https://developer.android.com/topic/libraries/architecture/navigation/
● https://bit.ly/2PNQbb7
Codelab: https://codelabs.developers.google.com/codelabs/android-navigation
matteobonifazi@gmail.com - @mbonifazi

Android JET Navigation