web-dev-qa-db-fra.com

comment obtenir viewModel par viewModels? (fragment-ktx)

Je travaille avec Single viewModel pour l'activité et tout son fragment.

Donc, pour initialiser viewmodel s'il faut écrire ce code de configuration dans onActivityCreated de tous les fragments

    override fun onActivityCreated(savedInstanceState: Bundle?) {
        super.onActivityCreated(savedInstanceState)
        viewModel = ViewModelProviders.of(activity!!).get(NoteViewModel::class.Java)
    }

J'allais en profondeur la Android page d'extension KTX: ( voir ici )

et j'ai trouvé que je peux initialiser le modèle de vue comme ceci:

    // Get a reference to the ViewModel scoped to this Fragment
    val viewModel by viewModels<MyViewModel>()

    // Get a reference to the ViewModel scoped to its Activity
    val viewModel by activityViewModels<MyViewModel>()

J'ai donc ajouté ci-dessous les dépendances à mon gradle (application):

    //ktx Android
    implementation 'androidx.core:core-ktx:1.0.2'
    implementation 'androidx.fragment:fragment-ktx:1.0.0'
    implementation "androidx.lifecycle:lifecycle-extensions:2.0.0"

Mais quand j'essaie d'utiliser viewModels/activityViewModels dans ma candidature, leur référence est introuvable.

Je veux de l'aide sur la façon d'utiliser ces extensions avec un exemple de base. J'ai essayé de rechercher des exemples sans en trouver.

23
Anmol

Notez que vous pouvez utiliser Koin pour que cela fonctionne:

private val viewModel by viewModel<NoteViewModel>()

utiliserait l'importation

import org.koin.Android.viewmodel.ext.Android.viewModel

de la dépendance:

implementation "org.koin:koin-Android-viewmodel:+" // change + en w/e est le dernier quand tu lis ceci

0
Blundell

Vous utilisez cette dernière version alpha:

dependencies {
    implementation 'androidx.fragment:fragment-ktx:1.2.0-alpha01'
}
0
Birju Vachhani