使用 MVVM 模式时访问 ViewModel

Access ViewModel when using MVVM pattern

我正在尝试实现 MVVM 模式。 所以我有一个 Activity 包含一个包含 3 个片段的 ViewPager。每个片段都作用于同一个实体。

在 Activty 中,我创建了一个类似的 ViewModel 实例。

protected void onCreate(Bundle savedInstanceState) {
    TaskViewModel.Factory factory = new 
    TaskViewModel.Factory(this.getApplication(), mTaskId);
    mTaskViewModel  = ViewModelProviders.of(this, factory).get(TaskViewModel.class);
}

现在碎片化分享的正确方法是什么?

getter / setter 是否仍在遵守准则?

谢谢

如果您想在片段 (ViewPager) 之间共享相同的 ViewModel,您可以使用 activity 而不是 "this"(片段)来初始化 ViewModel。

"of" 中的第一个参数定义将使用哪个 LivecycleOwner。由于您选择了 activity,因此 ViewModel 将在 Fragment 之间持久存在并保持活动状态,直到 activity 被销毁。 (科特林)

override fun onCreateView(inflater: LayoutInflater?, container: ViewGroup?, savedInstanceState: Bundle?): View? {
   var viewModel = ViewModelProviders.of(
                activity, //define who's the holder of the ViewModel
                viewModelFactory)
   .get(YourVm::class.java)
  /** ..... **/
}

工厂本身仅用于初始化 ViewModel(带数据)。

Android 示例:

@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container,
        @Nullable Bundle savedInstanceState) {
          YourVm viewModel = ViewModelProviders.of(
                getActivity(), //define who's the holder of the ViewModel
                viewModelFactory)
   .get(YourVm::class); 
  /** ... **/
}

这意味着您可以 initialize/use 在您的 activity 中使用您的 ViewModel 并使用 ViewModelProviders.of() 来获取持久性 ViewModel。