简体   繁体   中英

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.

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"
}

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM