Android Activity LaunchMode SingleTask不会触发MvvmCross ViewModel构造函数或Init方法

时间:2013-08-07 15:48:21

标签: android xamarin mvvmcross

为了提供使用MvvmCross的Android应用的正确后退按钮行为,我必须将特定视图的LaunchMode修改为SingleTask。虽然这很好用,但是当第二次使用其中一个Views时,ViewModel构造函数和Init方法(与Nav类结合使用以将参数从一个View传递到另一个)显然不再被触发。我认为这是“按设计”或“由Android操作系统强制执行”的行为,在将代码置于每次显示视图时可能需要调用的Constructors / Init方法时(例如RefreshJobList),您只需要注意这一点。顺便提一下,我的修复是在Activity的OnResume方法中调用所需的方法,例如:

((JobDetailViewModel)this.ViewModel).RefreshJobPhotos();

有没有“更好的方式”?

1 个答案:

答案 0 :(得分:2)

  

我认为这是“按设计”或“由Android OS强制执行”的行为

如果您强制将某个活动设为SingleTask,那么它只会被创建一次,因此只会获得一次ViewModel。

有一个onNewIntent方法,你可以覆盖并使用它来解决这个问题--MvvmCross过去曾试图使用它 - 但它的使用让大多数开发人员感到困惑 - 所以目前Mvx一直在这方面保持不变专门的平台专用区域。


使用SingleTask时,请注意Android自己的警告:

  

其他模式 - singleTask和singleInstance - 不适合大多数应用程序,因为它们会导致用户可能不熟悉的交互模型,并且与大多数其他应用程序非常不同。 / p>

来自:http://developer.android.com/guide/topics/manifest/activity-element.html#lmode