Skip to content

Commit 0d6b24e

Browse files
Finish Tutorial 6-6 and add navigation architecture charts to MainActivity.kt of ViewPager2 tutorials
1 parent e0cc155 commit 0d6b24e

File tree

98 files changed

+2626
-233
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

98 files changed

+2626
-233
lines changed

Tutorial6-1NavigationUI-ViewPager2/build.gradle

+3-2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ dependencies {
5959
implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"
6060
implementation "androidx.navigation:navigation-runtime-ktx:$rootProject.navigationVersion"
6161

62-
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
63-
62+
testImplementation 'junit:junit:4.+'
63+
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
64+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
6465
}

Tutorial6-1NavigationUI-ViewPager2/src/main/java/com/smarttoolfactory/tutorial6_1navigationui_viewpager2/MainActivity.kt

+11
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@ import androidx.navigation.ui.setupActionBarWithNavController
1111
import androidx.viewpager2.widget.ViewPager2
1212

1313

14+
/*
15+
*** Navigation Architecture ***
16+
17+
MainActivity (Appbar + Toolbar)
18+
|- MainNavHost
19+
|
20+
| FragmentViewPagerContainer(ViewPager2 + TabLayout)
21+
|- HomeFragment1 -> HomeFragment2 -> HomeFragment3
22+
|- DashboardFragment1 -> DashboardFragment2 -> DashboardFragment3
23+
*/
24+
1425
/**
1526
* Example to use [ViewPager2] with navigation components.
1627
*
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.smarttoolfactory.tutorial6_1navigationui_viewpager2.mainfragment
1+
package com.smarttoolfactory.tutorial6_1navigationui_viewpager2.viewpagerfragment
22

33

44
import android.os.Bundle
@@ -7,10 +7,10 @@ import com.google.android.material.tabs.TabLayoutMediator
77
import com.smarttoolfactory.tutorial6_1navigationui_viewpager2.R
88
import com.smarttoolfactory.tutorial6_1navigationui_viewpager2.adapter.ChildFragmentStateAdapter
99
import com.smarttoolfactory.tutorial6_1navigationui_viewpager2.blankfragment.BaseDataBindingFragment
10-
import com.smarttoolfactory.tutorial6_1navigationui_viewpager2.databinding.FragmentMainBinding
10+
import com.smarttoolfactory.tutorial6_1navigationui_viewpager2.databinding.FragmentViewpagerContainerBinding
1111

1212

13-
class MainFragment : BaseDataBindingFragment<FragmentMainBinding>() {
13+
class ViewPagerContainerFragment : BaseDataBindingFragment<FragmentViewpagerContainerBinding>() {
1414

1515
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1616
super.onViewCreated(view, savedInstanceState)
@@ -33,7 +33,7 @@ class MainFragment : BaseDataBindingFragment<FragmentMainBinding>() {
3333

3434
}
3535

36-
override fun getLayoutRes(): Int = R.layout.fragment_main
36+
override fun getLayoutRes(): Int = R.layout.fragment_viewpager_container
3737

3838

3939
}

Tutorial6-1NavigationUI-ViewPager2/src/main/res/navigation/nav_graph.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,13 @@
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
xmlns:tools="http://schemas.android.com/tools"
55
android:id="@+id/nav_graph"
6-
app:startDestination="@id/mainFragment">
6+
app:startDestination="@id/start_dest">
77

88
<fragment
9-
android:id="@+id/mainFragment"
10-
android:name="com.smarttoolfactory.tutorial6_1navigationui_viewpager2.mainfragment.MainFragment"
9+
android:id="@+id/start_dest"
10+
android:name="com.smarttoolfactory.tutorial6_1navigationui_viewpager2.viewpagerfragment.ViewPagerContainerFragment"
1111
android:label="MainFragment"
12-
tools:layout="@layout/fragment_main">
12+
tools:layout="@layout/fragment_viewpager_container">
1313
<action
1414
android:id="@+id/action_mainFragment_to_homeFragment2"
1515
app:destination="@id/homeFragment2" />
@@ -59,8 +59,8 @@
5959
<!-- Global Action Start -->
6060
<action
6161
android:id="@+id/action_global_start"
62-
app:destination="@id/mainFragment"
63-
app:popUpTo="@id/mainFragment"
62+
app:destination="@id/start_dest"
63+
app:popUpTo="@id/start_dest"
6464
app:popUpToInclusive="true" />
6565

6666
</navigation>

Tutorial6-2NavigationUI-ViewPager2-NestedNavhost/build.gradle

+3-2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ dependencies {
5959
implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"
6060
implementation "androidx.navigation:navigation-runtime-ktx:$rootProject.navigationVersion"
6161

62-
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
63-
62+
testImplementation 'junit:junit:4.+'
63+
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
64+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
6465
}

Tutorial6-2NavigationUI-ViewPager2-NestedNavhost/src/main/java/com/smarttoolfactory/tutorial6_2navigationui_viewpager2_nestednavhost/MainActivity.kt

+25-2
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,34 @@ import androidx.navigation.ui.setupActionBarWithNavController
1313
import androidx.viewpager2.widget.ViewPager2
1414
import com.smarttoolfactory.tutorial6_2naigationui_viewpager2_nestednavhost.R
1515
import com.smarttoolfactory.tutorial6_2navigationui_viewpager2_nestednavhost.blankfragment.LoginFragment1
16-
import com.smarttoolfactory.tutorial6_2navigationui_viewpager2_nestednavhost.mainfragment.MainFragment
16+
import com.smarttoolfactory.tutorial6_2navigationui_viewpager2_nestednavhost.viewpagerfragment.ViewPagerContainerFragment
1717
import com.smarttoolfactory.tutorial6_2navigationui_viewpager2_nestednavhost.navhost.DashBoardNavHostFragment
1818
import com.smarttoolfactory.tutorial6_2navigationui_viewpager2_nestednavhost.navhost.HomeNavHostFragment
1919

2020

21+
/*
22+
*** Navigation Architecture ***
23+
24+
MainActivity (Appbar + Toolbar)
25+
|- MainNavHost
26+
|
27+
|- ViewPagerContainerFragment(ViewPager2 + TabLayout)
28+
| |- HomeNavHostFragment
29+
| | |- HF1 -> HF2 -> HF3
30+
| |
31+
| |- DashboardNavHostFragment
32+
| | |- DF1 -> DF2 -> DF3
33+
| |
34+
| |- NotificationHostFragment
35+
| | |- NF1 -> NF2 -> NF3
36+
| |
37+
| |-LoginFragment1
38+
|
39+
|- LoginFragment1 -> LoginFragment2
40+
41+
*/
42+
43+
2144
/**
2245
* Example that uses [ViewPager2] with tabs and each page with it's own back stack
2346
* and navigation.
@@ -30,7 +53,7 @@ import com.smarttoolfactory.tutorial6_2navigationui_viewpager2_nestednavhost.nav
3053
* check for the [NavController.getCurrentDestination] to navigate to it when device rotated
3154
*
3255
* * [LoginFragment1] is added to main graph, because of that appbar back navigation only works
33-
* with the [MainFragment]'s [NavController]
56+
* with the [ViewPagerContainerFragment]'s [NavController]
3457
*
3558
*/
3659
class MainActivity : AppCompatActivity() {

Tutorial6-2NavigationUI-ViewPager2-NestedNavhost/src/main/java/com/smarttoolfactory/tutorial6_2navigationui_viewpager2_nestednavhost/mainfragment/MainFragment.kt

-44
This file was deleted.

Tutorial6-2NavigationUI-ViewPager2-NestedNavhost/src/main/res/navigation/nav_graph.xml

+6-6
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
xmlns:tools="http://schemas.android.com/tools"
55
android:id="@+id/nav_graph"
6-
app:startDestination="@id/main_dest">
6+
app:startDestination="@id/start_dest">
77

88
<!-- MainFragment-->
99
<fragment
10-
android:id="@+id/main_dest"
11-
android:name="com.smarttoolfactory.tutorial6_2navigationui_viewpager2_nestednavhost.mainfragment.MainFragment"
10+
android:id="@+id/start_dest"
11+
android:name="com.smarttoolfactory.tutorial6_2navigationui_viewpager2_nestednavhost.viewpagerfragment.ViewPagerContainerFragment"
1212
android:label="MainFragment"
13-
tools:layout="@layout/fragment_main">
13+
tools:layout="@layout/fragment_viewpager_container">
1414

1515
<!-- Login -->
1616
<action
@@ -22,8 +22,8 @@
2222
<!-- Global Action Start -->
2323
<action
2424
android:id="@+id/action_global_start"
25-
app:destination="@id/main_dest"
26-
app:popUpTo="@id/main_dest"
25+
app:destination="@id/start_dest"
26+
app:popUpTo="@id/start_dest"
2727
app:popUpToInclusive="true" />
2828

2929
<!-- Login -->

Tutorial6-3NavigationUI-ViewPager2-Appbar-NestedNavigation-LiveData/build.gradle

+3-2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ dependencies {
5959
implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"
6060
implementation "androidx.navigation:navigation-runtime-ktx:$rootProject.navigationVersion"
6161

62-
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
63-
62+
testImplementation 'junit:junit:4.+'
63+
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
64+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
6465
}

Tutorial6-3NavigationUI-ViewPager2-Appbar-NestedNavigation-LiveData/src/main/java/com/smarttoolfactory/tutorial6_3navigationui_viewpager2_appbar_nested_navigation/MainActivity.kt

+17
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,23 @@ import com.smarttoolfactory.tutorial6_3navigationui_viewpager2_appbar.R
1515
import com.smarttoolfactory.tutorial6_3navigationui_viewpager2_appbar.databinding.ActivityMainBinding
1616
import com.smarttoolfactory.tutorial6_3navigationui_viewpager2_appbar_nested_navigation.adapter.ActivityFragmentStateAdapter
1717

18+
19+
/*
20+
*** Navigation Architecture ***
21+
22+
MainActivity(Appbar + Toolbar + TabLayout + ViewPager2)
23+
|
24+
|- HomeNavHostFragment
25+
| |- HF1 -> HF2 -> HF3
26+
|
27+
|- DashboardNavHostFragment
28+
| |- DF1 -> DF2 -> DF3
29+
|
30+
|- NotificationHostFragment
31+
|- NF1 -> NF2 -> NF3
32+
33+
*/
34+
1835
/**
1936
* MainActivity has it's appbar that navigation is controlled using the [NavController]
2037
* retrieved from [NavHostFragment] via [LiveData]

Tutorial6-4NavigationUI-ViewPager2-FragmentToolbar-NestedNavigation/build.gradle

+3-2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ dependencies {
5959
implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"
6060
implementation "androidx.navigation:navigation-runtime-ktx:$rootProject.navigationVersion"
6161

62-
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
63-
62+
testImplementation 'junit:junit:4.+'
63+
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
64+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
6465
}

Tutorial6-4NavigationUI-ViewPager2-FragmentToolbar-NestedNavigation/src/main/java/com/smarttoolfactory/tutorial6_4_navigationui_viewpager_fragmenttoolbar_nested_navigation/MainActivity.kt

+23-10
Original file line numberDiff line numberDiff line change
@@ -7,18 +7,31 @@ import androidx.databinding.DataBindingUtil
77
import androidx.navigation.fragment.NavHostFragment
88
import com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar.R
99
import com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar.databinding.ActivityMainBinding
10-
import com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar_nested_navigation.mainfragment.MainFragment
10+
import com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar_nested_navigation.viewpagerfragment.ViewPagerContainerFragment
11+
12+
13+
/*
14+
*** Navigation Architecture ***
15+
16+
MainActivity
17+
|- MainNavHost
18+
|
19+
|- ViewPagerContainerFragment(ViewPager)
20+
|
21+
|- HomeNavHostFragment(Appbar + Toolbar)
22+
| |- HF1 -> HF2 -> HF3
23+
|
24+
|- DashboardNavHostFragment(Appbar Toolbar)
25+
| |- DF1 -> DF2 -> DF3
26+
|
27+
|- NotificationHostFragment(Appbar Toolbar)
28+
|- NF1 -> NF2 -> NF3
29+
30+
*/
1131

1232
/**
13-
* In this example each [NavHostFragment] has it's own toolbar, also activity has
14-
* it's own toolbar either.
15-
*
16-
* * [LoginFragment2] in this example is added to main back stack instead of Navhost,
17-
* because of that it does not have any association with toolbar in [MainFragment]
18-
*
19-
* * It creates a navigation with back arrow but since it's in [MainFragment] it's
20-
* displayed for a moment(This is not a correct implementation only for demonstration)
21-
* and [LoginFragment2] is opened afterwards with no toolbar
33+
* In this example each [NavHostFragment] has it's own toolbar
34+
* They can navigate back with back arrow when navigated to an inner fragment of ViewPager
2235
*
2336
*/
2437
class MainActivity : AppCompatActivity() {
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
package com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar_nested_navigation.mainfragment
1+
package com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar_nested_navigation.viewpagerfragment
22

33

44
import android.os.Bundle
55
import android.view.View
66
import com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar.R
7-
import com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar.databinding.FragmentMainBinding
7+
import com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar.databinding.FragmentViewpagerContainerBinding
88
import com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar_nested_navigation.adapter.ChildFragmentStateAdapter
99
import com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar_nested_navigation.blankfragment.BaseDataBindingFragment
1010

11-
class MainFragment : BaseDataBindingFragment<FragmentMainBinding>() {
11+
class ViewPagerContainerFragment : BaseDataBindingFragment<FragmentViewpagerContainerBinding>() {
1212

1313
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
1414
super.onViewCreated(view, savedInstanceState)
@@ -24,7 +24,7 @@ class MainFragment : BaseDataBindingFragment<FragmentMainBinding>() {
2424

2525
}
2626

27-
override fun getLayoutRes(): Int = R.layout.fragment_main
27+
override fun getLayoutRes(): Int = R.layout.fragment_viewpager_container
2828

2929

3030
}

Tutorial6-4NavigationUI-ViewPager2-FragmentToolbar-NestedNavigation/src/main/res/navigation/nav_graph.xml

+4-4
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
xmlns:app="http://schemas.android.com/apk/res-auto"
44
xmlns:tools="http://schemas.android.com/tools"
55
android:id="@+id/nav_graph"
6-
app:startDestination="@id/main_dest">
6+
app:startDestination="@id/start_dest">
77

88
<!-- MainFragment-->
99
<fragment
10-
android:id="@+id/main_dest"
11-
android:name="com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar_nested_navigation.mainfragment.MainFragment"
10+
android:id="@+id/start_dest"
11+
android:name="com.smarttoolfactory.tutorial6_4_navigationui_viewpager_fragmenttoolbar_nested_navigation.viewpagerfragment.ViewPagerContainerFragment"
1212
android:label="MainFragment"
13-
tools:layout="@layout/fragment_main">
13+
tools:layout="@layout/fragment_viewpager_container">
1414

1515
</fragment>
1616

Tutorial6-5NavigationUI-ViewPager2-FragmentToolbar-MixedNavigation/build.gradle

+3-2
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ dependencies {
5959
implementation "androidx.navigation:navigation-ui-ktx:$rootProject.navigationVersion"
6060
implementation "androidx.navigation:navigation-runtime-ktx:$rootProject.navigationVersion"
6161

62-
implementation 'androidx.vectordrawable:vectordrawable:1.1.0'
63-
62+
testImplementation 'junit:junit:4.+'
63+
androidTestImplementation 'androidx.test.ext:junit:1.1.1'
64+
androidTestImplementation 'androidx.test.espresso:espresso-core:3.2.0'
6465
}

0 commit comments

Comments
 (0)