【问题标题】:Android Activity LaunchMode SingleTask doesn't trigger MvvmCross ViewModel constructor or Init methodAndroid Activity LaunchMode SingleTask 不会触发 MvvmCross ViewModel 构造函数或 Init 方法
【发布时间】:2013-08-09 02:18:08
【问题描述】:

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

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

有没有“更好的方法”?

【问题讨论】:

    标签: android xamarin mvvmcross


    【解决方案1】:

    我认为这是“按设计”或“由 Android 操作系统强制执行”的行为

    如果您强制 Activity 为 SingleTask,那么它只会被创建一次,因此它只会获得一次 ViewModel。

    有一个 onNewIntent 方法,当这种情况发生时,您可以覆盖并使用它来解决 - MvvmCross 过去曾尝试使用它 - 但它的使用让大多数开发人员感到困惑 - 所以目前 Mvx 在这方面非常专门的平台特定区域。


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

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

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

    【讨论】:

    • 谢谢斯图尔特。使用 SingleTask 是我可以创建后退按钮的正确行为的唯一方法,但这并不会使应用程序的导航不熟悉。它只是一个典型的列表屏幕,带有显示详细信息屏幕的添加/更新/删除记录。因此,每当您在详细信息屏幕上时,单击 2 次后退按钮将关闭应用程序,而不是返回列表和详细信息屏幕的所有实例。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多