Questions tagged «android-viewmodel»

3
AndroidViewModel与ViewModel
随着Android Architecture Components库的引入,引入了几个新类,包括AndroidViewModel和ViewModel。但是,我很难弄清楚这两个类之间的区别。该文档简要描述AndroidViewModel如下: 应用程序上下文感知 ViewModel 我很简短,但是这意味着什么呢?我们什么时候应该选择使用AndroidViewModelover ViewModel,反之亦然?

21
ViewModelProviders在1.1.0中已弃用
在查看的Google文档时ViewModel,他们显示了以下有关如何获取的示例代码ViewModel: val model = ViewModelProviders.of(this).get(MyViewModel::class.java) 使用最新的依赖项时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) 因此,方法的名称create每次调用时都会得到一个ViewModel的新实例,这不是我想要的。 有什么想法可以替换上面不推荐使用的代码吗?

4
从ViewModel观察LiveData
我有一个单独的类,负责处理数据提取(特别是Firebase),通常从中返回LiveData对象并异步更新它们。现在,我想将返回的数据存储在ViewModel中,但是问题是,为了获取所述值,我需要观察从数据获取类返回的LiveData对象。观察方法要求将LifecycleOwner对象作为第一个参数,但是我显然不在ViewModel中拥有该对象,并且我知道我不应该在ViewModel中保留对Activity / Fragment的引用。我该怎么办?

2
使用viewLifecycleOwner作为LifecycleOwner
我有一个片段: class MyFragment : BaseFragment() { // my StudentsViewModel instance lateinit var viewModel: StudentsViewModel override fun onCreateView(...){ ... } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) viewModel = ViewModelProviders.of(this).get(StudentsViewModel::class.java) updateStudentList() } fun updateStudentList() { // Compiler error on 'this': Use viewLifecycleOwner as the LifecycleOwner viewModel.students.observe(this, Observer { //TODO: …

1
什么是ViewModelStore和viewModelStoreOwner?
由于这个新的ViewModelProvider api,我非常困惑(不推荐使用ViewModelProviders) 与新更改一样,也有新的构造函数(源代码)。 #1 public ViewModelProvider(@NonNull ViewModelStoreOwner owner) { this(owner.getViewModelStore(), owner instanceof HasDefaultViewModelProviderFactory ? ((HasDefaultViewModelProviderFactory) owner).getDefaultViewModelProviderFactory() : NewInstanceFactory.getInstance()); } #2 public ViewModelProvider(@NonNull ViewModelStoreOwner owner, @NonNull Factory factory) { this(owner.getViewModelStore(), factory); } #3 public ViewModelProvider(@NonNull ViewModelStore store, @NonNull Factory factory) { mFactory = factory; mViewModelStore = store; } 摇篮依赖度: implementation "androidx.lifecycle:lifecycle-extensions:2.2.0-rc02" …

1
ViewModel状态的ViewPager2 / Tabs问题
我正在遵循MVVM模式-意味着每个片段都有一个ViewModel。 我使用ViewPager2 添加了两个选项卡。 我的适配器如下所示: @Override public Fragment createFragment(int position) { switch (position) { case 0: return new MergedItemsFragment(); case 1: return new ValidatedMergedItemsFragment(); } return new MergedItemsFragment(); } 选项卡正在工作。但是,我注意到我的MergedItemsFragment的ViewModel行为异常。在添加选项卡之前,我像这样导航到片段: NavHostFragment.findNavController(this).navigate(R.id.action_roomFragment_to_itemsFragment); 当我将该片段留给NavHostFragment.findNavController(this).popBackStack()以后再返回该片段时,我将得到一个新的空ViewModel。这是有意的。 使用新方法,我正在使用return new MergedItemsFragment()。当我离开该片段并稍后返回时,我得到一个包含旧数据的ViewModel 。这是一个问题,因为旧数据不再相关,因为用户在另一个片段中选择了不同的数据。 更新#1 我意识到他实际上将所有旧的Fragments保留在内存中,因为同一打印语句被多次调用。它的调用时间随着我离开并返回该屏幕的次数而增加。因此,如果我离开并返回10次并旋转设备,他实际上将执行10次一行。有人猜测如何以与ViewModels一起使用的方式来实现带有导航组件的Tabs / ViewPagers吗? 更新#2 我将ViewModels设置如下: viewModel = new ViewModelProvider(this, providerFactory).get(MergedItemViewModel.class) 我得到相同的结果: viewModel = ViewModelProviders.of(this).get(MergedItemViewModel.class); …
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.