在另一个活动中加载 ViewModel 实例

戴维德·米歇隆

当应用程序启动时,我需要下载数据并填充所有视图模型以避免在应用程序使用过程中变慢。第一个活动是:

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 内部提供它,例如SharedPreferencessqlitedatase 等。

如果你真的需要使用一个 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

将模型的另一个实例分配给ViewModel

来自分类Dev

ViewModel 包含另一个 ViewModel 的集合

来自分类Dev

观察另一个 ViewModel 的 ViewModel

来自分类Dev

在另一个活动中使用从主要活动实例化的套接字

来自分类Dev

在另一个ViewModel的PropertyChanged上更新另一个ViewModel

来自分类Dev

每个ViewModel的Autofac实例

来自分类Dev

实例化视图的ViewModel

来自分类Dev

ViewModel的多个实例

来自分类Dev

2020年如何在活动中获取ViewModel实例?

来自分类Dev

实例作为另一个实例的位置参数

来自分类Dev

如何设置另一个实例的实例值?

来自分类Dev

从另一个元素实例引用 Vue 实例

来自分类Dev

无法实例化另一个类中的活动

来自分类Dev

从通知抽屉执行操作会生成另一个已经运行的活动实例

来自分类Dev

在IOC中始终只保留一个viewmodel实例是真的方法吗?

来自分类Dev

如何将多个 View 的 DataContext 设置为一个 ViewModel 实例

来自分类Dev

在另一个活动中加载 SharedPreferences

来自分类Dev

从 DLL 加载类,将其实例化为另一个类的子类

来自分类Dev

从另一个ViewModel的动作更新CanExecute

来自分类Dev

如何访问另一个控件的viewModel

来自分类Dev

Caliburn Micro,对另一个ViewModel的消息/操作

来自分类Dev

kendo requirejs从另一个模块访问viewmodel

来自分类Dev

从另一个ViewModel的动作更新CanExecute

来自分类Dev

从另一个ViewModel访问属性

来自分类Dev

在ViewModel中创建控件实例

来自分类Dev

无法创建ViewModel类的实例

来自分类Dev

通过ViewModelProvider获取ViewModel实例

来自分类Dev

从 XAML 强制 ViewModel 实例化

来自分类Dev

无法创建 ViewModel 类型的实例

Related 相关文章

热门标签

归档