2013-08-07 63 views
0

爲了提供正確的使用MvvmCross的Android應用程序的後退按鈕行爲,我必須將特定視圖的LaunchMode修改爲SingleTask。雖然這可以正常工作,但是當第二次使用這些視圖之一時,ViewModel構造函數和Init方法(與用於將參數從一個視圖傳遞到另一個視圖的類相結合使用)顯然不再被觸發。我認爲這是「設計」或「由Android OS執行」的行爲,當將代碼放置在可能需要在每次顯示視圖(例如RefreshJobList)時需要調用的構造函數/初始方法中時,您只需要注意這些行爲。我順便修復,是一個電話到所需的方法在活動的OnResume方法,例如:Android活動LaunchMode SingleTask不會觸發MvvmCross ViewModel構造函數或Init方法

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

是否有「更好的方式」?

回答

2

我想這就是行爲「設計」或「由Android操作系統實施」

如果您正在迫使活動是SingleTask那麼所以它只會只會創建一次ViewModel一次。

有一個onNewIntent方法,當這種情況發生時你可以重寫和使用它 - MvvmCross試圖在過去使用這個方法 - 但它的使用讓大多數開發人員感到困惑 - 所以目前Mvx在這裏避開非常專業化的平臺特定區域。


當使用SingleTask,請注意Android的自身警告:

其它模式 - singleTask和singleInstance - 是不適合大多數應用,因爲它們導致的交互模型很可能對用戶不熟悉,並且與大多數其他應用程序非常不同。

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

+0

感謝斯圖爾特。使用SingleTask是我可以創建後退按鈕的正確行爲的唯一方式,但這不會導致應用程序的導航不熟悉。這只是一個典型的帶添加/更新/刪除記錄的列表屏幕,用於顯示詳細信息屏幕。因此,無論何時在詳細信息屏幕上,點擊後退按鈕2次都會關閉應用程序,而不是返回列表和詳細信息屏幕的所有實例。 – Graham

相關問題