2017-06-16 69 views
1

我MainFragment創建視圖模型重新創建。視圖模型是針對片段

getFragmentManager() 
       .beginTransaction() 
       .replace(R.id.root, Details.newInstance()) 
       .addToBackStack(null) 
       .commit(); 

當用戶按下回詳細信息片段,一切正常,但是如果用戶在細節片段,然後按旋轉裝置當時:

  • 爲MainFragment
  • 創建視圖模型的新實例
  • 老實例仍然活着(方法onCleared未調用)

這是在ViewModelProviders中的錯誤?如何解決這個問題? 在我看來ViewModel應該被恢復。

+0

你找到一個解決這個? – SqueezyMo

回答

-1

您是使用鏈接的片段,但需要活動使用:

MainViewModel mainViewModel = ViewModelProviders.of(getActivity()).get(MainViewModel.class); 
+1

這是餿主意。如果我這樣做,每個ViewModel都會以活動的形式進行活動。我不想要這樣。我希望ViewModel的活動時間與分片一樣長。 –

+0

在哪個方法中您要添加的分段? –

+0

我在用戶選擇時在回調中補充片段項目在recyclerview –

1

這不是很明顯,但是當你調用addToBackStack,片段經理不會破壞你的片段,只是停止了,當新交易來了。你現在基本上有兩件物品,都是你的Details的實例。由於onDestroy從未被稱爲第一個,其ViewModel'sonCleared從未被稱爲。

在你的情況下,簡單地檢查,如果您的片段目前在容器(例如,通過FragmentManager.findFragment(),而不是在這樣的情況下替換它,應該是足夠的。