嘿我想让我的ViewModel工作,但到目前为止还没有运气。
Android Studio显示错误Cannot resolve symbol 'ViewModelProviders'
。
我在此主题中发现的每个其他问题都在纠正extends Activity
到extends AppCompatActivity
,但我正在扩展正确的问题。不确定我错过了什么......
我的代码基于This YouTube video
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);
BaseViewModel.java
public class BaseViewModel extends ViewModel {
private Movie[] mMovie;
public void init (Movie[] movies){
this.mMovie = movies;
}
public Movie[] getMovie() {
return mMovie;
}
答案 0 :(得分:151)
我的构建中没有两个依赖项,因此问题。
implementation "android.arch.lifecycle:extensions:1.1.0"
implementation "android.arch.lifecycle:viewmodel:1.1.0"
谢谢@Muthukrishnan Rajendran
答案 1 :(得分:41)
如果您使用的是androidx
,则需要:
implementation 'androidx.lifecycle:lifecycle-extensions:2.0.0-rc01'
答案 2 :(得分:16)
android.arch.lifecycle:extensions已过时使用
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
像这样创建视图模型的实例:
Java
Yourclass obj = new ViewModelProvider(context).get(ClassViewModel.class);
科特琳
var obj = ViewModelProvider(context).get(ClassViewModel::class.java)
答案 3 :(得分:11)
如果您使用的是已编译的sdk 28版或更高版本,则只需添加一个依赖项即可获得ViewModel
和LiveData
dependencies {
//...
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
}
答案 4 :(得分:5)
在我的情况下(Android Studio 3.6.3),请在AppCompatActivity
中成功执行以下操作:
MyViewModel myViewModel = new ViewModelProvider(this).get(MyViewModel.class);
两个都需要
implementation 'androidx.appcompat:appcompat:1.1.0'
implementation 'androidx.lifecycle:lifecycle-extensions:2.2.0'
(仅与lifecycle-extentions
一起使用)
答案 5 :(得分:2)
在build.gradle文件中,在依赖项块中添加这些行
dependencies {
...
def lifecycle_version = "1.1.1"
// ViewModel and LiveData
implementation "android.arch.lifecycle:extensions:$lifecycle_version"
//if not using java 8,use the following line
annotationProcessor "android.arch.lifecycle:compiler:$lifecycle_version"
//if using java 8,ignore above line and add the following line
implementation "android.arch.lifecycle:common-java8:$lifecycle_version"
...
}
答案 6 :(得分:2)
您应该在项目的build.gradle中添加库
def lifecycle_version =“ 2.0.0”
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
答案 7 :(得分:2)
在实现“ androidx.lifecycle:lifecycle-extensions:2.2.0”及更高版本中,不推荐使用ViewModelProviders,请使用
viewModel = ViewModelProvider(this).get(BaseViewModel.class);
或在科特林
viewModel = ViewModelProvider(this).get(BaseViewModel::class.java);
代替
viewModel = ViewModelProviders.of(this).get(BaseViewModel.class);
答案 8 :(得分:2)
-' ViewModelProviders '现在已弃用
- 在Java中
viewModel = ViewModelProvider(this).get(BaseViewModel.class);
- 在科特林
var viewModel = ViewModelProvider(this).get(BaseViewModel::class.java)
参考- https://developer.android.com/reference/androidx/lifecycle/ViewModelProviders
答案 9 :(得分:1)
使用androix
库
更改
implementation 'com.android.support:appcompat-v7:28.0.0'
到
implementation 'androidx.appcompat:appcompat:1.1.0-alpha03'
您可以使用
Refactor>Migrate to AndroidX
答案 10 :(得分:1)
在我的应用程序中工作正常(java) 之前
loginViewModel = ViewModelProviders.of(this, new LoginViewModelFactory())
.get(LoginViewModel.class);
更改为
loginViewModel = new ViewModelProvider(this,new LoginViewModelFactory()).get(LoginViewModel.class);
希望它可以帮助
答案 11 :(得分:1)
就我而言,我面临以下问题,即:
**无法访问androidx.lifecycle。具有默认的viewmodelprovider工厂,该工厂是您的类名称的
子类,请检查您的模块类路径,检查您的模型是否有冲突的依赖项,**
我在 project build.gradle 中添加了以下依赖项。
def lifecycle_version = "2.2.0"
implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version"
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
然后,我在模块项目中创建我的类,并且遇到了此问题,然后将这些库添加到 module build.gradle 文件中,问题已解决。
答案 12 :(得分:0)
我从Android official documentation解决了这个问题。在下面添加到build.grale
def lifecycle_version = "2.0.0"
// ViewModel and LiveData
implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
答案 13 :(得分:0)
我有同样的问题。其他解决方案都没有帮助我。
我意识到我使用的是import androidx.lifecycle.ViewModelProvider;
而不是import androidx.lifecycle.ViewModelProviders;
。
因此,请确保您正在使用import androidx.lifecycle.ViewModelProviders;
。即是ViewModelProviders
和s
。