From d18a974e4b8b2dca39ff5c81160744d0438d6459 Mon Sep 17 00:00:00 2001 From: Arnaud Giuliani Date: Tue, 27 Aug 2024 18:33:14 +0200 Subject: [PATCH] reinforce example for navigation & args --- .../org/koin/sample/sandbox/di/AppModule.kt | 2 ++ .../sample/sandbox/navigation/MainViewModel.kt | 9 --------- .../sample/sandbox/navigation/NavFragmentA.kt | 8 +++++++- .../sample/sandbox/navigation/NavFragmentB.kt | 6 +++++- .../sample/sandbox/navigation/NavViewModel.kt | 17 +++++++++++++++++ .../sample/sandbox/navigation/NavViewModel2.kt | 17 +++++++++++++++++ 6 files changed, 48 insertions(+), 11 deletions(-) delete mode 100644 examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/MainViewModel.kt create mode 100644 examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavViewModel.kt create mode 100644 examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavViewModel2.kt diff --git a/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/di/AppModule.kt b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/di/AppModule.kt index afb6cb194..11827b03c 100644 --- a/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/di/AppModule.kt +++ b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/di/AppModule.kt @@ -26,6 +26,7 @@ import org.koin.sample.sandbox.mvp.MVPActivity import org.koin.sample.sandbox.mvvm.MVVMActivity import org.koin.sample.sandbox.mvvm.MVVMFragment import org.koin.sample.sandbox.navigation.NavViewModel +import org.koin.sample.sandbox.navigation.NavViewModel2 import org.koin.sample.sandbox.scope.ScopedActivityA import org.koin.sample.sandbox.workmanager.SimpleWorker import org.koin.sample.sandbox.workmanager.SimpleWorkerService @@ -120,6 +121,7 @@ val workerScopedModule = lazyModule { val navModule = lazyModule { viewModelOf(::NavViewModel) + viewModelOf(::NavViewModel2) } val allModules = lazyModule { diff --git a/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/MainViewModel.kt b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/MainViewModel.kt deleted file mode 100644 index 8405f5472..000000000 --- a/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/MainViewModel.kt +++ /dev/null @@ -1,9 +0,0 @@ -package org.koin.sample.sandbox.navigation - -import androidx.lifecycle.ViewModel -import java.util.* - -class NavViewModel() : ViewModel(){ - val id : String = UUID.randomUUID().toString() - override fun toString(): String = "MainViewModel[id:$id]" -} \ No newline at end of file diff --git a/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavFragmentA.kt b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavFragmentA.kt index 94f84bed2..56ba85638 100644 --- a/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavFragmentA.kt +++ b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavFragmentA.kt @@ -9,12 +9,14 @@ import android.widget.Button import androidx.navigation.fragment.findNavController import org.koin.androidx.navigation.koinNavGraphViewModel import org.koin.sample.sandbox.R +import org.koin.sample.sandbox.navigation.NavFragmentB.Companion class NavFragmentA : Fragment() { val mainViewModel: NavViewModel by koinNavGraphViewModel(R.id.main) lateinit var button: Button + var int = 1 override fun onCreateView( inflater: LayoutInflater, container: ViewGroup?, @@ -29,10 +31,14 @@ class NavFragmentA : Fragment() { button = requireView().findViewById(R.id.a_button) button.setOnClickListener { - findNavController().navigate(R.id.action_fragmentA_to_fragmentB) + int++ + println("A -> $int") + findNavController().navigate(R.id.action_fragmentA_to_fragmentB, + Bundle().apply { putString("argKey", "value+$int") }) } ID = mainViewModel.id + println("A vm id: ${NavFragmentB.ID}") } companion object { diff --git a/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavFragmentB.kt b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavFragmentB.kt index d04afedb7..477e06c1a 100644 --- a/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavFragmentB.kt +++ b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavFragmentB.kt @@ -13,6 +13,7 @@ import org.koin.sample.sandbox.R class NavFragmentB : Fragment() { val mainViewModel: NavViewModel by koinNavGraphViewModel(R.id.main) + val vm2: NavViewModel2 by koinNavGraphViewModel(R.id.main) lateinit var button: Button @@ -34,7 +35,10 @@ class NavFragmentB : Fragment() { ID = mainViewModel.id assert(ID == NavFragmentA.ID) - println("vm id: $ID") + println("B vm id: $ID") + println("vm arg: ${mainViewModel.argument}") + + println("B - ${vm2.id} - ${vm2.argument}") } companion object { diff --git a/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavViewModel.kt b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavViewModel.kt new file mode 100644 index 000000000..122bccffb --- /dev/null +++ b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavViewModel.kt @@ -0,0 +1,17 @@ +package org.koin.sample.sandbox.navigation + +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.ViewModel +import java.util.* + +class NavViewModel(private val savedStateHandle: SavedStateHandle) : ViewModel(){ + + init { + println("* NavViewModel *") + } + + val id : String = UUID.randomUUID().toString() + override fun toString(): String = "NavViewModel[id:$id]" + + val argument: String? = savedStateHandle.get("argKey") +} \ No newline at end of file diff --git a/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavViewModel2.kt b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavViewModel2.kt new file mode 100644 index 000000000..ca22adc9b --- /dev/null +++ b/examples/androidx-samples/src/main/java/org/koin/sample/sandbox/navigation/NavViewModel2.kt @@ -0,0 +1,17 @@ +package org.koin.sample.sandbox.navigation + +import androidx.lifecycle.SavedStateHandle +import androidx.lifecycle.ViewModel +import java.util.* + +class NavViewModel2(private val savedStateHandle: SavedStateHandle) : ViewModel(){ + + init { + println("* NavViewModel2 *") + } + + val id : String = UUID.randomUUID().toString() + override fun toString(): String = "NavViewModel2[id:$id]" + + val argument: String? = savedStateHandle.get("argKey") +} \ No newline at end of file