Skip to content

Commit 63fe5b9

Browse files
committed
Navigation Component added
1 parent 68eb992 commit 63fe5b9

File tree

9 files changed

+89
-33
lines changed

9 files changed

+89
-33
lines changed
Lines changed: 10 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,24 +1,18 @@
11
package ru.bis.basearchitectureexample.ui
22

3-
import androidx.appcompat.app.AppCompatActivity
4-
import android.os.Bundle
3+
import androidx.navigation.findNavController
54
import ru.bis.basearchitectureexample.R
6-
import ru.bis.example2.ui.fragments.Example2
75
import ru.bis.example1.ui.fragments.Example1
6+
import ru.sir.presentation.base.BaseActivity
7+
import ru.sir.presentation.navigation.UiAction
88

9-
class MainActivity : AppCompatActivity() {
10-
override fun onCreate(savedInstanceState: Bundle?) {
11-
super.onCreate(savedInstanceState)
12-
setContentView(R.layout.activity_main)
9+
class MainActivity : BaseActivity() {
10+
override val layoutId: Int = R.layout.activity_main
11+
override fun getNavController() = findNavController(R.id.navHostFragment)
1312

14-
openDefaultFragments()
15-
}
16-
17-
private fun openDefaultFragments() {
18-
supportFragmentManager
19-
.beginTransaction()
20-
.replace(R.id.example1Layout, Example1())
21-
.replace(R.id.example2Layout, Example2())
22-
.commit()
13+
override fun navigateTo(action: UiAction) {
14+
when(action.action) {
15+
Example1.ACTION_OPEN_EXAMPLE_2 -> { navigator.navigate(R.id.example2) }
16+
}
2317
}
2418
}

app/src/main/res/layout/activity_main.xml

Lines changed: 9 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -6,22 +6,16 @@
66
android:layout_height="match_parent"
77
tools:context=".ui.MainActivity">
88

9-
<androidx.constraintlayout.widget.ConstraintLayout
10-
android:id="@+id/example1Layout"
9+
<fragment
10+
android:id="@+id/navHostFragment"
11+
android:name="androidx.navigation.fragment.NavHostFragment"
1112
android:layout_width="0dp"
12-
android:layout_height="match_parent"
13+
android:layout_height="0dp"
14+
app:layout_constraintLeft_toLeftOf="parent"
15+
app:layout_constraintRight_toRightOf="parent"
1316
app:layout_constraintTop_toTopOf="parent"
14-
app:layout_constraintEnd_toStartOf="@id/example2Layout"
15-
app:layout_constraintStart_toStartOf="parent"
16-
app:layout_constraintBottom_toBottomOf="parent"/>
17-
18-
<androidx.constraintlayout.widget.ConstraintLayout
19-
android:id="@+id/example2Layout"
20-
android:layout_width="0dp"
21-
android:layout_height="match_parent"
22-
app:layout_constraintTop_toTopOf="parent"
23-
app:layout_constraintEnd_toEndOf="parent"
24-
app:layout_constraintStart_toEndOf="@id/example1Layout"
25-
app:layout_constraintBottom_toBottomOf="parent"/>
17+
app:layout_constraintBottom_toBottomOf="parent"
18+
app:defaultNavHost="true"
19+
app:navGraph="@navigation/main_graph"/>
2620

2721
</androidx.constraintlayout.widget.ConstraintLayout>
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<navigation xmlns:android="http://schemas.android.com/apk/res/android"
3+
xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/main_graph"
4+
app:startDestination="@id/example1">
5+
6+
<fragment
7+
android:id="@+id/example1"
8+
android:name="ru.bis.example1.ui.fragments.Example1"
9+
android:label="Example1" />
10+
<fragment
11+
android:id="@+id/example2"
12+
android:name="ru.bis.example2.ui.fragments.Example2"
13+
android:label="Example2" />
14+
</navigation>

entities/presentation/build.gradle

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,9 @@ dependencies {
5050
implementation 'androidx.appcompat:appcompat:1.2.0'
5151
implementation 'com.google.android.material:material:1.3.0'
5252

53+
api 'androidx.navigation:navigation-fragment-ktx:2.3.4'
54+
api 'androidx.navigation:navigation-ui-ktx:2.3.4'
55+
5356
implementation lifecycleExtensions
5457
annotationProcessor lifecycleCompiler
5558

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
package ru.sir.presentation.base
2+
3+
import android.os.Bundle
4+
import androidx.appcompat.app.AppCompatActivity
5+
import androidx.navigation.NavController
6+
import ru.sir.presentation.navigation.UiAction
7+
8+
abstract class BaseActivity : AppCompatActivity() {
9+
abstract val layoutId: Int
10+
protected lateinit var navigator: NavController
11+
12+
abstract fun getNavController(): NavController
13+
abstract fun navigateTo(action: UiAction)
14+
15+
fun navigateTo(action: String, bundle: Bundle? = null) {
16+
navigateTo(UiAction(action, bundle))
17+
}
18+
19+
override fun onCreate(savedInstanceState: Bundle?) {
20+
super.onCreate(savedInstanceState)
21+
setContentView(layoutId)
22+
23+
navigator = getNavController()
24+
}
25+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
package ru.sir.presentation.navigation
2+
3+
import android.os.Bundle
4+
5+
data class UiAction(
6+
val action: String,
7+
val data: Bundle? = null
8+
)

features/example1/src/main/java/ru/bis/example1/ui/fragments/Example1.kt

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,10 +6,15 @@ import android.view.ViewGroup
66
import ru.bis.example1.databinding.FragmentExample1Binding
77
import ru.bis.example1.di.components.Example1Component
88
import ru.bis.example1.view_models.Example1ViewModel
9+
import ru.sir.presentation.base.BaseActivity
910
import ru.sir.presentation.base.BaseApplication
1011
import ru.sir.presentation.base.BaseFragment
12+
import ru.sir.presentation.navigation.UiAction
1113

1214
class Example1 : BaseFragment<Example1ViewModel, FragmentExample1Binding>(Example1ViewModel::class.java) {
15+
companion object {
16+
const val ACTION_OPEN_EXAMPLE_2 = "action_open_example_2"
17+
}
1318

1419
override fun inject(app: BaseApplication) {
1520
app.getComponent<Example1Component>().inject(this)
@@ -21,6 +26,8 @@ class Example1 : BaseFragment<Example1ViewModel, FragmentExample1Binding>(Exampl
2126
}
2227

2328
override fun setListeners() {
24-
// TODO set listeners here via binding
29+
binding.nextBtn.setOnClickListener {
30+
(requireActivity() as BaseActivity).navigateTo(UiAction(ACTION_OPEN_EXAMPLE_2))
31+
}
2532
}
2633
}

features/example1/src/main/java/ru/bis/example1/view_models/Example1ViewModel.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class Example1ViewModel @Inject constructor(
3333
RecyclerViewBaseDataModel("Label 1", RV_ITEM),
3434
RecyclerViewBaseDataModel("Label 2", RV_ITEM),
3535
RecyclerViewBaseDataModel("Label 3", RV_ITEM),
36-
RecyclerViewBaseDataModel("Label 4", RV_ITEM),
36+
RecyclerViewBaseDataModel("Label 4", RV_ITEM)
3737
)
3838

3939
override fun init() {

features/example1/src/main/res/layout/fragment_example1.xml

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,17 @@
3535
android:text="@{viewModel.result}"
3636
android:layout_margin="10dp"/>
3737

38+
<Button
39+
android:id="@+id/nextBtn"
40+
android:layout_width="wrap_content"
41+
android:layout_height="wrap_content"
42+
app:layout_constraintTop_toTopOf="parent"
43+
app:layout_constraintEnd_toEndOf="parent"
44+
app:layout_constraintBottom_toTopOf="@id/rvExample"
45+
app:layout_constraintStart_toStartOf="parent"
46+
app:layout_constraintHorizontal_bias="0.95"
47+
android:text="NEXT"/>
48+
3849
<androidx.recyclerview.widget.RecyclerView
3950
android:id="@+id/rvExample"
4051
android:layout_height="0dp"

0 commit comments

Comments
 (0)