2013-10-25 90 views
1

我想在其視圖中使用動態創建的片段進行單個活動。 我有一個ActivityViewModel和一個FragmentViewModel和匹配的視圖和佈局(ActivityView有一個FrameLayout主機片段)。該片段通過在ActivityViewModel.Start方法內調用ShowViewModel <>來顯示。 我正在使用如http://enginecore.blogspot.ro/2013/06/more-dynamic-android-fragments-with.html中所述的CustomePresenter。片段和視圖模型

它從冷啓動和恢復後正常工作。但是,在活動被破壞之後它將不起作用。

這是發生在這種有問題的情況下的序列: 活動已創建,Mvx找到一個緩存的ViewModel並將其附加到活動。由於ViewModel被緩存,它不會觸發Start方法(這觸發了創建分段)。沒關係。但是在下一步中,Android會重新創建這個片段,但它不會獲得與其關聯的ViewModel,因爲無論CustomPresenter(在創建片段時都會照顧它)或MvxFragment.OnCreate都不會創建它 - 就像MvxActivity機制一樣。因此我得到一個ViewModel-less片段。

所以我想知道,如果MvxFragemnt創建像MvxActivity一樣創建自己的ViewModel時不應該好嗎?此外,它應該處理Save,Resume(調用相鄰的ViewModel的方法)。 或者我正在處理這個錯誤的方式或缺少的東西。

回答

1

我創建了一個描述相同問題的示例,您正在描述。您可以更改樣本,以支持多個區域中包含多個片段。這些地區也可以用於演示者。

請看一看這個演示示例,它顯示了一個簡單的實現在Android項目中使用的片段組成:https://github.com/JelleDamen/CustomMvxAndroidPresenter

FYI: 我用同樣的教程爲靈感。讓我知道你是否需要任何幫助。

+0

請注意,[只有鏈接的答案](http://meta.stackoverflow.com/tags/link-only-answers/info)不鼓勵,所以答案應該是搜索解決方案的終點(與另一個引用的中途停留時間相比,這些引用往往會隨着時間推移而變得過時)。請考慮在此添加獨立的摘要,並將鏈接保留爲參考。 – kleopatra

1

對不起,你是正確的。 此行爲可以在創建具有活動和片段的簡單應用程序時再現,然後在「開發人員選項」中選擇始終銷燬活動。現在切換到另一個應用程序,然後切換回來。 Init和Start未被調用,活動視圖模型從緩存視圖模型中獲取。 這與片段無關,它關於視圖模型如何適用於活動。

現在,關於片段生命週期以及它沒有得到視圖模型綁定的事實,正如您所提到的,目前這在Mvvmcross中不可用。