使用MVVM模式时访问ViewModel

时间:2017-09-29 09:18:51

标签: android android-fragments mvvm viewmodel

我正在尝试实现MVVM partern。 所以我有一个包含ViewPager的Activity,里面有3个片段。每个片段都在同一个实体上工作。

在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是否仍然遵守指南?

由于

1 个答案:

答案 0 :(得分:1)

如果你想在你的片段(ViewPager)之间共享相同的ViewModel,你可以使用你的活动来初始化你的ViewModel而不是"这个" (片段)。

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

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)
  /** ..... **/
}

Factory本身仅用于初始化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); 
  /** ... **/
}

这意味着您可以在活动中初始化/使用ViewModel,并使用ViewModelProviders.of()获取持久性ViewModel。