使用 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。
我正在尝试实现 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。