有没有办法将其他参数传递给我的自定义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上下文,但不能传递其他参数.我真的很感激任何帮助.谢谢.
编辑:我添加了一些代码.我希望现在好多了.
在查看的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
我是 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);
我想使用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中有其他方法