Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/204.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 为什么要通过片段将依赖项传递给viewmodel?_Android_Android Fragments_Mvvm_Dependencies - Fatal编程技术网

Android 为什么要通过片段将依赖项传递给viewmodel?

Android 为什么要通过片段将依赖项传递给viewmodel?,android,android-fragments,mvvm,dependencies,Android,Android Fragments,Mvvm,Dependencies,我正在研究谷歌的Android蓝图MVVM数据绑定示例() 我注意到viewmodel的依赖项是通过片段传递的 public static TaskDetailFragment newInstance(String taskId) { Bundle arguments = new Bundle(); arguments.putString(ARGUMENT_TASK_ID, taskId); TaskDetailFragment fragment = new TaskDe

我正在研究谷歌的Android蓝图MVVM数据绑定示例()

我注意到viewmodel的依赖项是通过片段传递的

public static TaskDetailFragment newInstance(String taskId) {
    Bundle arguments = new Bundle();
    arguments.putString(ARGUMENT_TASK_ID, taskId);
    TaskDetailFragment fragment = new TaskDetailFragment();
    fragment.setArguments(arguments);
    return fragment;
}

@Override
public void onResume() {
    super.onResume();
    mViewModel.start(getArguments().getString(ARGUMENT_TASK_ID));
}
上面示例中的任务id不能传递到viewmodel的构造函数中吗?而该片段是否会忘记任务id

有人能解释一下这样做的目的/好处吗


谢谢大家!

Android需要能够在任何时候从头开始重新构建您的片段。它只知道两件事:

  • 你的片段有一个默认构造函数
  • 您的片段可以被传递到一个参数包
  • 它不知道如何调用任意构造函数以及要传递给该构造函数的参数。它也不知道如何坚持和恢复这些论点


    其思想是将任何初始化信息放入arguments包中。当您的activity+片段被销毁时(比如说内存压力),Android会保存参数包。如果随后重新创建activity+片段,则会提供相同的参数。捆绑包的特殊之处在于它实现了
    Parcelable
    ,这意味着Android知道如何将其转换为纯字节,然后再转换回来。

    它是一个视图模型,作用域是刚刚创建的片段,发生在
    onCreate()
    ,不是吗?如果不通过
    参数将其传递给片段,则无法将
    taskId
    放入
    onCreate