在ViewModelProviders#of(Fragment)上输入错误

时间:2018-01-16 22:51:00

标签: java android android-fragments

我正试图通过google tutorial on building good ap architecture。我正在使用java 8和SDK 26。 这是我到目前为止的代码:

package test.me;

import android.app.Fragment;
import android.arch.lifecycle.ViewModel;
import android.arch.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.support.annotation.Nullable;

public class ChronoFragment extends Fragment {

    private ViewModel my_model;

    @Override
    public void onActivityCreated(@Nullable Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        my_model = ViewModelProviders.of(this).get(ViewModel.class);  // <-- error on this
        // and so on
    }
}

问题是到目前为止,SDK返回以下错误:

Cannot resolve the method 'of(test.me.ChronoFragment)'.

我不明白这个

  • ChronoFragment的类型为Fragment
  • 方法ViewModelProviders#of(Fragment)does exist,可以通过sdk访问。

对我做错了什么的想法?

4 个答案:

答案 0 :(得分:16)

架构组件使用支持库中的appcompat Fragment而不是本机库。尝试将Fragment的导入更改为

import android.support.v4.app.Fragment;

由于历史原因,有两个不同的Fragment类。它们具有相同的功能,但存在于两个不同的包中。有关详细信息,请参阅Why are there two Fragment classes in Android?

截至2019年2月6日:

现在有第三个Fragment课程。如果您使用的是新的AndroidX库,请执行

import androidx.fragment.app.Fragment;

请确保使用与其他依赖项一致的正确Fragment类。

答案 1 :(得分:4)

我遇到了同样的问题,google文档没有告诉您,您需要将以下依赖项添加到Build Gradle文件中,然后“同步”

implementation "android.arch.lifecycle:extensions:1.1.1"
annotationProcessor "android.arch.lifecycle:compiler:1.1.1"

答案 2 :(得分:0)

我遇到了同样的问题,android studio自动导入了android.support.v4.app.Fragment;,但是我使用的是androidX。如果您的情况相同,则必须使用 androidX随处导入

import androidx.fragment.app.Fragment;

答案 3 :(得分:0)

在使用Android X库时,我遇到了同样的问题,并使用以下方法解决了问题。

Android X的Gradle依赖项:

implementation "androidx.lifecycle:lifecycle-extensions:2.1.0-alpha04" annotationProcessor "androidx.lifecycle:lifecycle-compiler:2.1.0-alpha04"

导入:

import androidx.lifecycle.ViewModelProviders; import androidx.lifecycle.ViewModel;

参考-https://developer.android.com/jetpack/androidx/migrate