Search code examples
javaandroidmvvmandroid-architecture-components

Cannot resolve method of android.support.v4.app.FragmentActivity in ViewModelProviders


I am trying to implement architecture component in my application, but when I am to add lifecycleowner to my viewmodel inside my fragment with getActivity() its show message

Cannot resolve method of android.support.v4.app.FragmentActivity

This is my code:

 viewModel = ViewModelProviders.of(getActivity()).get(MyViewModel.class);
        viewModel.setToken(token);
        viewModel.getRecent().observe(getActivity(), new Observer<List<Recent>>() {
            @Override
            public void onChanged(List<Recent> recent) {
                adapter.setData(recent);
            }
        });

My fragment is derived from android.support.v4.app.Fragment

and MyActivity is extends AppCompatActivity

and this is my Gradle file:

    def paging_version = "2.1.0"
    def lifecycle_version = "2.0.0"
    def room_version = "2.1.0-alpha04"

    implementation "androidx.room:room-runtime:$room_version"
    annotationProcessor "androidx.room:room-compiler:$room_version"
    implementation "androidx.paging:paging-runtime:$paging_version"
    implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
    implementation "androidx.lifecycle:lifecycle-common-java8:$lifecycle_version"

How do I solve this problem? thanks in advance.


Solution

  • Problem

    In androidx.lifecycle.ViewModelProviders.of(FragmentActivity), they accept androidx.fragment.app.FragmentActivity, not android.support.v4.app.FragmentActivity.

    Solution

    1. Migrate entire project to AndroidX using Migrate to AndroidX which introduced from Android Studio 3.2. You can found information in this page
    2. Change dependencies version to support library version. Dependencies version can be found this page
    dependencies {
        def lifecycle_version = "1.1.1"
    
        // ViewModel and LiveData
        implementation "android.arch.lifecycle:extensions:$lifecycle_version"
        // alternatively - just ViewModel
        implementation "android.arch.lifecycle:viewmodel:$lifecycle_version" // For Kotlin use viewmodel-ktx
        // alternatively - just LiveData
        implementation "android.arch.lifecycle:livedata:$lifecycle_version"
        // alternatively - Lifecycles only (no ViewModel or LiveData).
        //     Support library depends on this lightweight import
        implementation "android.arch.lifecycle:runtime:$lifecycle_version"
    
        annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version" // For Kotlin use kapt instead of annotationProcessor
        // alternately - if using Java8, use the following instead of compiler
        implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
    
        // optional - ReactiveStreams support for LiveData
        implementation "android.arch.lifecycle:reactivestreams:$lifecycle_version"
    
        // optional - Test helpers for LiveData
        testImplementation "android.arch.core:core-testing:$lifecycle_version"
    }