我已经使用MVP很长一段时间了,我开始转移到MVP和MVVM之间的混合状态
详细我的应用程序将如下所示:
我的问题:
例如,假设我有一个项目列表,用户长按一个来编辑它们,这个架构的哪个部分应该负责检查用户是否有权这样做并让他们编辑项目或显示错误信息?
例如,假设活动下面有3个碎片,并且一个ViewModel可以满足它们
我可以使用类似的东西:
class MainViewModel : ViewModel() , IFragmentA, IFragmentB, IFragmentC
然后当我尝试在片段中获取ViewModel时,我可以编写如下内容:
lateinit var viewModel: IFragmentA
override fun onAttach(context: Context?) {
super.onAttach(context)
vm = ViewModelProviders.of(context as AppCompatActivity).get(IFragmentA::class.java)
}
注意:我知道上面的代码不起作用,我要问的是,是否有类似于此的方法可行
例如,如果用户尝试删除条目,并且我希望他们输入密码,那么流程是:
感谢您提供任何帮助
我最近将我的一个应用程序从MVP移植到MVVM架构。无论你是部分地还是完全地做到这一点,你都会走向一个伟大而干净的东西,你会喜欢它。
在查看答案之前,请先看看这个MVVM架构图以及它的一些注意事项
我们来看看每个类的角色。
-Listen到MutableLiveData Obeservers并将Data设置为视图,此处没有其他逻辑。
有一个来自google的todo app示例项目,它使用MVVM。请参考,这将是非常有帮助的。
在MVVM的Google示例项目中实际上有一个这个用例的例子。
public static AddEditTaskViewModel obtainViewModel(FragmentActivity activity) {
// Use a Factory to inject dependencies into the ViewModel
ViewModelFactoryfactory= ViewModelFactory.getInstance(activity.getApplication());
return ViewModelProviders.of(activity, factory).get(AddEditTaskViewModel.class);
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
final View root = inflater.inflate(R.layout.addtask_frag, container, false);
if (mViewDataBinding == null) {
mViewDataBinding = AddtaskFragBinding.bind(root);
}
mViewModel = AddEditTaskActivity.obtainViewModel(getActivity());
mViewDataBinding.setViewmodel(mViewModel);
mViewDataBinding.setLifecycleOwner(getActivity());
setHasOptionsMenu(true);
setRetainInstance(false);
return mViewDataBinding.getRoot();
}
希望能帮助到你。