我正试图通过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 对我做错了什么的想法?
答案 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;