Skip to content

Commit 030de19

Browse files
madroidmaqnic0lette
authored andcommitted
Initialize the ViewModel using the extension function (android#406)
Official documents can be viewed : https://developer.android.com/reference/kotlin/androidx/fragment/app/package-summary#viewmodels
1 parent d4b9461 commit 030de19

File tree

5 files changed

+17
-16
lines changed

5 files changed

+17
-16
lines changed

app/build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ dependencies {
5252
implementation "androidx.appcompat:appcompat:$rootProject.supportLibraryVersion"
5353
implementation "androidx.constraintlayout:constraintlayout:$rootProject.constraintLayoutVersion"
5454
implementation "androidx.core:core-ktx:$rootProject.ktxVersion"
55+
implementation "androidx.fragment:fragment-ktx:$rootProject.fragmentVersion"
5556
implementation "androidx.lifecycle:lifecycle-extensions:$rootProject.lifecycleVersion"
5657
implementation "androidx.lifecycle:lifecycle-livedata-ktx:$rootProject.lifecycleVersion"
5758
implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:$rootProject.lifecycleVersion"

app/src/main/java/com/google/samples/apps/sunflower/GardenFragment.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,19 @@ import android.view.LayoutInflater
2121
import android.view.View
2222
import android.view.ViewGroup
2323
import androidx.fragment.app.Fragment
24+
import androidx.fragment.app.viewModels
2425
import androidx.lifecycle.Observer
25-
import androidx.lifecycle.ViewModelProviders
2626
import com.google.samples.apps.sunflower.adapters.GardenPlantingAdapter
2727
import com.google.samples.apps.sunflower.databinding.FragmentGardenBinding
2828
import com.google.samples.apps.sunflower.utilities.InjectorUtils
2929
import com.google.samples.apps.sunflower.viewmodels.GardenPlantingListViewModel
3030

3131
class GardenFragment : Fragment() {
3232

33+
private val viewModel: GardenPlantingListViewModel by viewModels {
34+
InjectorUtils.provideGardenPlantingListViewModelFactory(requireContext())
35+
}
36+
3337
override fun onCreateView(
3438
inflater: LayoutInflater,
3539
container: ViewGroup?,
@@ -43,10 +47,6 @@ class GardenFragment : Fragment() {
4347
}
4448

4549
private fun subscribeUi(adapter: GardenPlantingAdapter, binding: FragmentGardenBinding) {
46-
val factory = InjectorUtils.provideGardenPlantingListViewModelFactory(requireContext())
47-
val viewModel = ViewModelProviders.of(this, factory)
48-
.get(GardenPlantingListViewModel::class.java)
49-
5050
viewModel.gardenPlantings.observe(viewLifecycleOwner, Observer { plantings ->
5151
binding.hasPlantings = !plantings.isNullOrEmpty()
5252
})

app/src/main/java/com/google/samples/apps/sunflower/PlantDetailFragment.kt

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,8 +28,8 @@ import android.view.ViewGroup
2828
import androidx.core.app.ShareCompat
2929
import androidx.databinding.DataBindingUtil
3030
import androidx.fragment.app.Fragment
31+
import androidx.fragment.app.viewModels
3132
import androidx.lifecycle.Observer
32-
import androidx.lifecycle.ViewModelProviders
3333
import androidx.navigation.fragment.navArgs
3434
import com.google.android.material.snackbar.Snackbar
3535
import com.google.samples.apps.sunflower.databinding.FragmentPlantDetailBinding
@@ -44,15 +44,15 @@ class PlantDetailFragment : Fragment() {
4444
private val args: PlantDetailFragmentArgs by navArgs()
4545
private lateinit var shareText: String
4646

47+
private val plantDetailViewModel: PlantDetailViewModel by viewModels {
48+
InjectorUtils.providePlantDetailViewModelFactory(requireActivity(), args.plantId)
49+
}
50+
4751
override fun onCreateView(
4852
inflater: LayoutInflater,
4953
container: ViewGroup?,
5054
savedInstanceState: Bundle?
5155
): View? {
52-
val factory = InjectorUtils.providePlantDetailViewModelFactory(requireActivity(), args.plantId)
53-
val plantDetailViewModel = ViewModelProviders.of(this, factory)
54-
.get(PlantDetailViewModel::class.java)
55-
5656
val binding = DataBindingUtil.inflate<FragmentPlantDetailBinding>(
5757
inflater, R.layout.fragment_plant_detail, container, false).apply {
5858
viewModel = plantDetailViewModel

app/src/main/java/com/google/samples/apps/sunflower/PlantListFragment.kt

Lines changed: 5 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -24,27 +24,26 @@ import android.view.MenuItem
2424
import android.view.View
2525
import android.view.ViewGroup
2626
import androidx.fragment.app.Fragment
27+
import androidx.fragment.app.viewModels
2728
import androidx.lifecycle.Observer
28-
import androidx.lifecycle.ViewModelProviders
2929
import com.google.samples.apps.sunflower.adapters.PlantAdapter
3030
import com.google.samples.apps.sunflower.databinding.FragmentPlantListBinding
3131
import com.google.samples.apps.sunflower.utilities.InjectorUtils
3232
import com.google.samples.apps.sunflower.viewmodels.PlantListViewModel
3333

3434
class PlantListFragment : Fragment() {
3535

36-
private lateinit var viewModel: PlantListViewModel
36+
private val viewModel: PlantListViewModel by viewModels {
37+
InjectorUtils.providePlantListViewModelFactory(requireContext())
38+
}
3739

3840
override fun onCreateView(
3941
inflater: LayoutInflater,
4042
container: ViewGroup?,
4143
savedInstanceState: Bundle?
4244
): View? {
4345
val binding = FragmentPlantListBinding.inflate(inflater, container, false)
44-
val context = context ?: return binding.root
45-
46-
val factory = InjectorUtils.providePlantListViewModelFactory(context)
47-
viewModel = ViewModelProviders.of(this, factory).get(PlantListViewModel::class.java)
46+
context ?: return binding.root
4847

4948
val adapter = PlantAdapter()
5049
binding.plantList.adapter = adapter

build.gradle

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ buildscript {
2727
coreTestingVersion = '2.0.0'
2828
coroutinesVersion = "1.1.1"
2929
espressoVersion = '3.1.1'
30+
fragmentVersion = '1.1.0-alpha08'
3031
glideVersion = '4.9.0'
3132
gradleVersion = '3.4.0'
3233
gsonVersion = '2.8.2'

0 commit comments

Comments
 (0)