当是一个模型是构造所谓安卓?

0

的问题

我会通过这codelab: https://developer.android.com/codelabs/android-lifecycles#6 它解释了如何使用SavedStateHandle在一个模型,以生存的过程中死亡。 构造模型,具体如下:

    private SavedStateHandle mState;

    public SavedStateViewModel(SavedStateHandle savedStateHandle) {
       mState = savedStateHandle;
    }

和视图模型是以初始化的活动如下:

    mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);

当被视图模型的构造? 和如何将模型得到的 savedStateHandle 参数的模型?

编辑:

我现在回答我的问题,通过这个博文: https://www.rockandnull.com/viewmodel-savedstate/

它说,如果SavedStateHandle 是唯一参数,在我们的视图模型的构造的 by viewModels 委托它提供给视图模型。

但是, 如果我们有一个组合的定义参数,提供的依赖注射框架(剑柄)e。g:仓库,一对夫妇的其他运行时的论点e。g:选定的类别标识和SavedStateHandle,以帮助我们生存的过程中死亡的视图模型的构造-我们可以如何提供所有这些参数的工厂吗?

请一个小的例子,我的理解

android android-lifecycle viewmodel
2021-11-24 03:13:47
1

最好的答案

4

该Codelab你下面是让你了解一个特定的概念,而不是的 整个代码。 没有执行是由他们提供关于你的疑问,那就是,如何将模型得到它的参数?


概述: 由于某些内部实施的视图模型,不能通过参数模型,直接,而你需要创建一个第三级,它提供了参数的模型.


回答你的疑问:

有两种方法通过这一模型可以得到它的参数:

  1. 非依赖注射方式: 在这里,你创建的一个类延伸ViewModelProvider.工厂。 在你的代码,在这里你可以看到:
  mSavedStateViewModel = new ViewModelProvider(this).get(SavedStateViewModel.class);

这个默认的类是创建其中,无论是通过。这样做是对的目的的初始化,这是一个不完整的方式给出的codelab表达的需要。 你可以得到大量的知识的同样的概念,通过这篇文章:

https://medium.com/koderlabs/viewmodel-with-viewmodelprovider-factory-the-creator-of-viewmodel-8fabfec1aa4f

  1. 依赖注射方式: 现在,这是最简单的方法来实现一个ViewModelProviders如果你知道迪框架剑柄。 在这里,你只需要注释你的视图模型与@ViewModelInject和你做。第二个框架的背景和将创建一个ViewModelFactory而不是你这样做。这是一样的代码如何提供参数模型使用剑柄:

class SampleViewModel @ViewModelInject constructor(
                     @Assisted private val savedStateHandle: SavedStateHandle) : ViewModel() { }
2021-11-24 04:17:44

我已经试的应用程序从codelab. 它的构造是被称为即使我不传递任何工厂。 怎么可能? 谁穿的SavedStateHandle的构造?
Neeraja Gandla

你可以分享的应用程序? 你有没有运行的本地应用程序上的机器人工作室? 因为想链接到代码中提到的codelab中提到的一些用例和它们的解决方案,也没有完全成熟的解决方案就像一个完整的应用
Karunesh Palekar

你可以下载源代码从这里: developer.android.com/codelabs/android-lifecycles#1
Neeraja Gandla

也请看入编辑部分的问题
Neeraja Gandla

很高兴你得到了你的答案。
Karunesh Palekar

你可以拟订更多关于你的编辑吗? 我没有得到确切的内容你想知道的。 视图模型提供了额外的功能,缓存数据对于屏幕上的取向,因此提供这些功能,开发商不得不找到一种方法,其中,这是一个他们发现了。 我们所有开发人员必须经过这样的实例很多在我们的职业生涯中,我希望你明白
Karunesh Palekar

Neeraja Gandla

其他语言

此页面有其他语言版本

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................