2014-07-03 84 views
5

我正在使用MvvmCross爲iOS和Android編寫跨平臺的應用程序。適當的配置更改處理

Android版本使用嵌套的片段。例如,主視圖是一個導航抽屜,其各種導航中心視圖都是碎片,這些碎片可以是包含其他碎片的拆分視圖,並且最重要的是,每個視圖也可以顯示對話框碎片。

此外,並非所有ViewModel都通過ShowViewModel()顯示,其中一些更像PropertyChanged事件提供程序,如N=32 video中所示。

這工作正常,直到發生配置更改(通常是旋轉設備)。當片段視圖被重新創建時,它們的視圖模型不會被設置爲空。這在以下MvvmCross issue #636暗示,斯圖爾特也提到他希望該項目提出一些最佳實踐意見。

我現在的問題是最佳做法是什麼?如果您必須正確支持MvvmCross中的Android配置更改,您會做什麼?

我試着解決上面鏈接問題中所概述的問題,即通過某些形式的ViewModel註冊表在父ViewModels中,還試圖在保存其實例狀態時序列化Fragment的ViewModel,但成功次數有限。結果最好感到駭人聽聞。問題仍然是Fragment不知道如何在MvvmCross中重新創建View Model。哦,並且禁用設備輪換上的配置更改不算作答案。 ;-)

回答

0

顯然這個答案不是直接回答你的問題,但我覺得它的相關足以在這裏提到。

在我的Android應用我已經開始使用Dagger依賴注入庫注入Controller(或MVA風格Adapter)爲View/Fragment/Activity。這具有維護Controller類的實例的重要屬性,因此在輪換/配置更改時,重新注入相同的Controller

看來,Mvx.Resolve()應該能夠執行此理想,否則你會有一個糟糕的時間。如果它沒有在視圖類和Mvx類之間引入中間層緩存,那麼對我來說這是唯一的選擇。但是,這是我第一個小時左右閱讀Xamarin,所以我可能會脫穎而出。我一直是一個Android開發5年,現在雖然只是想我會添加我的2便士:)