2011-12-13 23 views
4

請看看這個問題,Android的錯誤:http://code.google.com/p/android/issues/detail?id=20791解決方法有關setRetainInstance(真)

項目(https://github.com/kaciula/BugRetain)使用CursorLoader通過取2倍的值從數據庫一個內容提供商並在屏幕上顯示它們。方案是這樣的:從活動A,轉到活動B,切換一次方向並返回到活動A.來自數據庫的值不再顯示。

任何人都可以提供解決此問題的解決方法嗎?這個問題不會出現在只有CursorLoader的情況下,而是與任何加載器一起使用。由於這個錯誤,我無法編寫一個使用setRetainInstance的片段的應用程序,並且這兩個方向都可用。我真的需要一個解決方法,直到Android人解決這個問題。有任何想法嗎?

回答

4

如果您使用加載程序,請勿將碎片設置爲可保留。如果您需要在配置更改之間存儲一些數據,請創建另一個可保留片段並將此數據傳遞給他。

一個類似的例子可以在這裏找到:FragmentRetainInstanceSupport。但是這個例子爲了線程目的使用額外的片段。在你的情況下,這個額外的片段將被用作數據容器。

+0

我試過你的建議,但問題仍然存在。在非UI片段中,我使用setRetainInstance(true)並使用CursorLoader來獲取數據,然後將其傳遞迴目標片段。但是,如果我遵循上述場景,則非UI片段不會將數據傳回。這裏的問題是,當使用setRetainInstance(true)並跟隨我的場景時,initLoader在onActivityCreated中被調用,但onLoadFinished在此之後從未被調用。 –

+0

你應該已經將你的Loader留在UI片段中,並且只複製需要在配置更改到非UI保留片段之間持久保存的數據。 – inazaruk

+0

讓我讓我的問題更清楚。我想解決的用例是我在一個片段中使用setRetainInstance(true)和一個加載器的片段。我想保留片段,以便如果加載器正在加載過程中,如果我切換方向,則片段會與加載器重新連接,並且不會使加載器重新開始。這個工作完美,但如果我通過我的問題中描述的情況,加載器不返回任何結果(我需要新的結果,因爲數據在其他屏幕中更改)。 –