相关疑难解决方法(0)

Android ViewModel附加参数

有没有办法将其他参数传递给我的自定义AndroidViewModel构造函数,除了Application上下文.例:

public class MyViewModel extends AndroidViewModel {
    private final LiveData<List<MyObject>> myObjectList;
    private AppDatabase appDatabase;

    public MyViewModel(Application application, String param) {
        super(application);
        appDatabase = AppDatabase.getDatabase(this.getApplication());

        myObjectList = appDatabase.myOjectModel().getMyObjectByParam(param);
    }
}
Run Code Online (Sandbox Code Playgroud)

当我想要使用我的自定义ViewModel类时,我在我的片段中使用此代码:

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

所以我不知道如何将额外的参数传递String param给我的自定义ViewModel.我只能传递Application上下文,但不能传递其他参数.我真的很感激任何帮助.谢谢.

编辑:我添加了一些代码.我希望现在好多了.

android mvvm viewmodel

72
推荐指数
5
解决办法
2万
查看次数

1.1.0中不推荐使用ViewModelProviders

在查看的Google文档ViewModel,他们显示了以下有关如何获取的示例代码ViewModel

val model = ViewModelProviders.of(this).get(MyViewModel::class.java)
Run Code Online (Sandbox Code Playgroud)

使用最新的依赖项时android.arch.lifecycle:extensions:1.1.1,没有此类ViewModelProviders

要在文档ViewModelProviders,我看到一个评论说:

在API级别1.1.0中不推荐使用该类。使用ViewModelProvider.AndroidViewModelFactory

问题是,当尝试使用时ViewModelProvider.AndroidViewModelFactory,无法找到等效的of方法来获取的实例ViewModel

我尝试做的是:

ViewModelProvider.AndroidViewModelFactory.getInstance(application).create(PlayerViewHolder::class.java)
Run Code Online (Sandbox Code Playgroud)

因此,方法的名称create每次调用时都会得到一个ViewModel的新实例,这不是我想要的。

有什么想法可以替换上面不推荐使用的代码吗?

android android-gradle-plugin android-viewmodel android-architecture-components

32
推荐指数
16
解决办法
1万
查看次数

如何在 2020/21 的活动中获取 ViewModel 的实例?

我是 mvvm 模式的新手。我为主要活动创建了一个 ViewModel。现在我想在主活动中获取 ViewModel 的一个实例。

Stackoverflow 上的大多数教程和答案都建议使用ViewModelProviders.of(...,但已弃用。

因此,根据stackoverflow上的这个问题:ViewModelProviders is deprecated in 1.1.0 main activity in onCreate,我执行以下操作(我可以发誓我已经运行了它):mainActivityViewModel = new ViewModelProvider(this).get(MainActivityViewModel.class);

但是,我收到一个错误消息,告诉我没有找到合适的构造函数。

error: no suitable constructor found for ViewModelProvider(MainActivity)

或者,绝对清楚,MainActivity 应为 ViewModelStoreOwner,我创建了一个变量 ViewModelStoreOwner vmso = this;并将该变量放入构造函数中,如下所示: mainActivityViewModel = new ViewModelProvider(vmso).get(MainActivityViewModel.class);

android mvvm viewmodel androidx viewmodelproviders

24
推荐指数
5
解决办法
2万
查看次数

如何在AndroidX中实例化ViewModel?

我想使用androidx库在Activity中初始化ViewModel

我已经尝试了文档中说的内容,但是没有用。“ .of”未解析。

import androidx.appcompat.app.AppCompatActivity
Run Code Online (Sandbox Code Playgroud)

import android.os.Bundle import androidx.databinding.DataBindingUtil import androidx.lifecycle.ViewModelProvider import com.example.myapplication.databinding.ActivityMainBinding

MainActivity类:AppCompatActivity(){

override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    val binding: ActivityMainBinding = DataBindingUtil.setContentView(
        this, R.layout.activity_main)
    binding.setLifecycleOwner(this)

    var model = ViewModelProvider.of(this).get(SheduleViewModel::class.java)

}
Run Code Online (Sandbox Code Playgroud)

}

的尚未解决,可能是在androidx中有其他方法

android viewmodel android-jetpack

5
推荐指数
6
解决办法
2314
查看次数