ViewModelProviders.of(FragmentActivity).get(ViewModel::class.java) asking for activity instead of viewmodel in get() call

922 Views Asked by At

ViewModelProviders.of(this).get() is failing for unforeseen reasons This is being called in my main activity which inherits from FragmentActivity. I'm actually getting an error on the .get() call. The error says it's expecting an activity instead of a ViewModel which goes against the docs. I've cleared and invalidated caches. My guess is that I have a bad import or an old library version somehow

import androidx.appcompat.app.AppCompatActivity import android.os.Bundle import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProviders import androidx.recyclerview.widget.LinearLayoutManager import androidx.recyclerview.widget.RecyclerView import com.apsoftware.urbandictionary.R

class DefinitionActivity : AppCompatActivity() {

    private lateinit var binding: ActivityPostListBinding
    private lateinit var viewModel: DefinitionActivity


    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        binding = DataBindingUtil.setContentView(this, R.layout.activity_main)
        binding.postList.layoutManager = LinearLayoutManager(this, RecyclerView.VERTICAL, false)
        viewModel = ViewModelProviders.of(this).get(DefinitionViewModel::class.java)
        binding.viewModel = viewModel
    } }

implementation "org.jetbrains.kotlin:kotlin-stdlib-jdk7:$kotlin_version"
implementation 'androidx.appcompat:appcompat:1.1.0-alpha01'
implementation 'androidx.core:core-ktx:1.1.0-alpha04'
implementation 'androidx.constraintlayout:constraintlayout:1.1.3'
implementation 'com.google.android.material:material:1.0.0'
implementation "com.squareup.okhttp3:okhttp:3.12.0"
implementation "com.squareup.retrofit2:retrofit:2.5.0"
implementation "com.squareup.retrofit2:adapter-rxjava2:2.4.0"
implementation 'com.squareup.retrofit2:converter-moshi:2.5.0'
implementation 'com.squareup.moshi:moshi:1.6.0'
kapt 'com.android.databinding:compiler:3.1.4'
implementation "com.google.dagger:dagger:2.20"
kapt "com.google.dagger:dagger-compiler:2.11"
annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
compileOnly "org.glassfish:javax.annotation:3.1.1"
implementation "io.reactivex.rxjava2:rxjava:2.2.2"
implementation "io.reactivex.rxjava2:rxandroid:2.0.2"
implementation "android.arch.lifecycle:extensions:1.1.1"
2

There are 2 best solutions below

0
On BEST ANSWER

You've declared

private lateinit var viewModel: DefinitionActivity

I.e., viewModel is an instance of a DefinitionActivity. It should be a DefinitionViewModel to match what you pass into get().

0
On

Change

 private lateinit var viewModel: DefinitionActivity

to

 private lateinit var viewModel: DefinitionViewModel