我在应用程序中关注 MMVM 架构,一切正常,直到我使用以下代码从 ViewModel 启动活动时崩溃。方法是使用数据绑定从 XML 调用并view
作为参数传递的,并且getApplication()
是AndroidViewModel
类中的方法。
getApplication().startActivity(new Intent(view.getContext(), MyActivity.class));
我相信这是因为我没有使用 NEW_TASK 标志,因为我在 Activity 类之外开始活动。
现在有以下我能想到的解决方案,但从架构的角度来看,我不确定哪一个是最好的。
1. ViewModel 带有一个方法,该方法Activity
作为参数并从片段中调用该方法
public startMyActivity(Activity activity){
activity.startActivity(new Intent(activity, MyActivity.class));
}
现在在片段中添加一个类似这样的监听器
mBinding.myButton.setOnClickListener(){
viewModel.startMyActivity(getActivity());
}
2. 为意图添加一个新任务标志并将其保存在 ViewModel 本身中
Intent myIntent = new Intent(view.getContext(), MyActivity.class);
myIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
getApplication().startActivity(myIntent);
3.从fragment本身启动Activity
mBinding.myButton.setOnClickListener(){
activity.startActivity(new Intent(activity, MyActivity.class));
}
我相信所有这些方法都可以正常工作,但要记住一个问题
是否可以在 Fragment 中单独设置侦听器以使用绑定的 ViewModels 从视图 xml 调用方法?
我不确定第二种方法是否仍会使某些操作系统中的应用程序崩溃。
从架构的角度和单元测试的角度来看,哪一种是最好的方法?