无法在AppCompatActivity上解析符号ViewModelProviders

She*_*ler 99 android viewmodel android-architecture-components

嘿我想让我的ViewModel工作,但到目前为止没有运气.Android Studio显示错误Cannot resolve symbol 'ViewModelProviders'.

我在这个题目中找到的每个其他问题被修正extends Activity到extends AppCompatActivity,但我延长正确的.不确定我错过了什么...
我的代码基于此YouTube视频

MainActivity.java

public class MainActivity extends AppCompatActivity implements
    TileAdapter.TileAdapterOnClickHandler {


private BaseViewModel viewModel;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    //set Toolbar
    Toolbar myToolbar = findViewById(R.id.toolbar);
    setSupportActionBar(myToolbar);


    //initialize viewModel
    viewModel = ViewModelProviders.of(this).get(BaseViewModel.class);
Run Code Online (Sandbox Code Playgroud)

BaseViewModel.java

public class BaseViewModel extends ViewModel {

private Movie[] mMovie;

public void init (Movie[] movies){
    this.mMovie = movies;
}

public Movie[] getMovie() {
    return mMovie;
}
Run Code Online (Sandbox Code Playgroud)

She*_*ler 177

我的构建中没有两个依赖项,因此问题.

implementation "android.arch.lifecycle:extensions:1.1.0"
implementation "android.arch.lifecycle:viewmodel:1.1.0"
Run Code Online (Sandbox Code Playgroud)

谢谢@Muthukrishnan Rajendran

  • @Sheler你的答案是正确的,但文档是错误的.在文档中指出ViewModel和LiveDat都在实现"android.arch.lifecycle:extensions:1.1.1" (7认同)
  • 嗯,这个解决方案仍然没有解决我的问题.我在我的应用程序gradle和allprojects {repositories {google()jcenter()}}中实现'android.arch.lifecycle:extensions:1.1.1'是否还需要添加其他内容? (2认同)

Bab*_*bao 67

如果你正在使用,androidx你需要这个:

implementation 'androidx.lifecycle:lifecycle-extensions:2.1.0'
Run Code Online (Sandbox Code Playgroud)

  • 检查此链接以获取最新的 androidx 版本 https://developer.android.com/jetpack/androidx/migrate (2认同)

Sum*_*kla 24

android.arch.lifecycle:extensions 已弃用

def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
Run Code Online (Sandbox Code Playgroud)

像这样创建视图模型的实例:

爪哇

Yourclass obj = new ViewModelProvider(context).get(ClassViewModel.class);
Run Code Online (Sandbox Code Playgroud)

科特林

var obj = ViewModelProvider(context).get(ClassViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)


San*_*eev 14

如果您使用的是已编译的sdk 28或更高版本,则只需添加单个依赖项即可获取ViewModel和LiveData

dependencies {
    //...
    def lifecycle_version = "1.1.1"

    // ViewModel and LiveData
    implementation "android.arch.lifecycle:extensions:$lifecycle_version"
}
Run Code Online (Sandbox Code Playgroud)

  • `androidx.lifecycle:lifecycle-extensions` 已弃用 https://developer.android.com/jetpack/androidx/releases/lifecycle (2认同)

hat*_*ata 6

在我的情况下(Android Studio 3.6.3 ~ 4.1.2),AppCompatActivity成功做到:

MyViewModel myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
Run Code Online (Sandbox Code Playgroud)

它需要这两个:

implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
Run Code Online (Sandbox Code Playgroud)

(单独使用lifecycle-extentions是不够的)

更新

似乎您不再需要包含'androidx.lifecycle:lifecycle-extensions:2.2.0'要实例化的 gradle 实现行 ( ) ViewModelProvider。


Fat*_*ğlu 5

您应该在项目的build.gradle中添加库

def lifecycle_version =“ 2.0.0”

// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
Run Code Online (Sandbox Code Playgroud)


she*_*hub 5

我从Android 官方文档中解决了这个问题。在下面添加到build.grale

def lifecycle_version = "2.0.0"
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
Run Code Online (Sandbox Code Playgroud)