当应用程序启动时,我需要下载数据并填充所有视图模型以避免在应用程序使用过程中变慢。第一个活动是:
public class MainActivity extends AppCompatActivity {
private MainViewModel mainViewModel;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mainViewModel = ViewModelProviders.of(this).get(MainViewModel.class);
}
}
我正在考虑在其他活动的 viewModel 实例上方的活动中创建并通过意图传递它。我不确定创建不在其一致活动中的 viewModel 实例是否正确。
该
ViewModel
课程旨在存储和管理生命周期中的意识的方式UI相关的数据。
如果你想在你的 viewModels 之间共享任何数据,最好的办法是创建一个singleton
数据源并在 viewModels 内部提供它,例如SharedPreferences
,sqlite
datase 等。
如果你真的需要使用一个 viewModel 作为你的数据源,你可以singletone
通过实现一个ViewModelFactory
已经在这个 github issue 中讨论过的自定义来创建它的一个实例:
您可以使用工厂来制作视图模型,这个因素将返回视图模型的单个对象。如:
class ViewModelFactory() : ViewModelProvider.Factory {
override fun create(modelClass: Class): T {
if (modelClass.isAssignableFrom(UserProfileViewModel::class.java)) {
val key = "UserProfileViewModel"
if(hashMapViewModel.containsKey(key)) {
return getViewModel(key) as T
} else {
addViewModel(key, UserProfileViewModel())
return getViewModel(key) as T
}
}
throw IllegalArgumentException("Unknown ViewModel class")
}
companion object {
val hashMapViewModel = HashMap<String, ViewModel>()
fun addViewModel(key: String, viewModel: ViewModel) {
hashMapViewModel.put(key, viewModel)
}
fun getViewModel(key: String): ViewModel? {
return hashMapViewModel[key]
}
}
}
在活动中:
viewModelFactory = Injection.provideViewModelFactory(this)
// Initialize Product View Model
userViewModel = ViewModelProviders.of(this,viewModelFactory).get(UserProfileViewModel::class.java)
这将仅提供您可以在活动之间共享的 UserProfileViewModel 的单个对象。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句