Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/183.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android ViewModelFactory需要_Android_Kotlin_Design Patterns_Android Viewmodel - Fatal编程技术网

Android ViewModelFactory需要

Android ViewModelFactory需要,android,kotlin,design-patterns,android-viewmodel,Android,Kotlin,Design Patterns,Android Viewmodel,我正在做一些代码实验室,但我并没有真正了解android中的ViewModel,为什么有时似乎需要通过ViewModelFactory创建它。你可以看到关于这一点的讨论 他们只是说使用执行初始化,但我不明白为什么。为什么我们需要使用工厂模式?是因为我们需要向ViewModel传递一些参数吗?还是因为其他原因?每次我们需要创建ViewModelFactory时,是否只是为了将参数传递给ViewModel 我一直在寻找答案,试图确认是否只是传递额外的参数,或者是因为其他原因,但我仍然不确定,我还没有

我正在做一些代码实验室,但我并没有真正了解android中的ViewModel,为什么有时似乎需要通过ViewModelFactory创建它。你可以看到关于这一点的讨论

他们只是说使用执行初始化,但我不明白为什么。为什么我们需要使用工厂模式?是因为我们需要向ViewModel传递一些参数吗?还是因为其他原因?每次我们需要创建ViewModelFactory时,是否只是为了将参数传递给ViewModel


我一直在寻找答案,试图确认是否只是传递额外的参数,或者是因为其他原因,但我仍然不确定,我还没有找到答案。

< P> >在使用<代码> VIEWMID> <代码>和<代码> ViewModelFactory < /代码>

之前,有一些事情需要考虑。
  • ViewModel
    生命周期软件组件
  • ViewModel
    survive
    configuration
    changes
  • ViewModelProvider'只能在没有参数构造函数的情况下实例化
    ViewModel'
  • 为什么我们需要使用工厂模式

    要使用参数实例化
    ViewModel
    ,需要使用
    ViewModelFactory
    ViewModelProviders
    实用程序无法创建带参数构造函数的ViewModel实例,因为它不知道如何以及在构造函数中传递哪些对象

    此外,还应该遵循依赖项注入原则。类不应该创建它需要的依赖项。应该提供,而不是创建

    例如—

    public class LogInViewModel extends ViewModel {
        private final LogInRepo repo;
        public LogInViewModel (LogInRepo repo) {
             /* this.repo = new LogInRepo(); Not recommended, It violates DI principle*/
             this.repo = repo;
        }
    }
    

    ViewModel具有生命周期意识,即使不使用ViewModelFactory,也能经受配置更改的影响,如果我没有记错,ViewModel不包含任何对活动的引用,因此
    ViewModel
    将无法保留配置更改。您在
    ViewModelProviders.of
    中传递活动或片段,并且不需要ViewModelFactory保留配置更改EAH,如果您的
    ViewModel
    没有参数构造函数,则可以跳过
    ViewModel工厂。使用此方法
    ViewModelProviders.of(this)
    。我将您的回答标记为正确,因为它帮助并澄清了许多事情,但您仍然可以从答案中删除该段落,或者根据需要对其进行编辑。非常感谢您的解释,非常有帮助