2013-08-27 33 views
0

我是新來的android編程。片段有目標不在片段管理器

我只是試圖在我的片段中保存ListView的狀態。爲此,我遵循無頭碎片(沒有UI的片段)。在這個片段中,我保存了ListView中使用的數據,並從主片段(具有UI的片段)開始無頭片段。

現在,我得到異常:

java.lang.IllegalStateException: Failure saving state: RetainedFragment{4161f850 #1 work} has target not in fragment manager: JobOpeningFramgent{41601c00} 

據我所關注的,這是當我試圖用另一個在DrawerLayout更換片段發生。

請諒解此例外的原因,以便更好地理解。

謝謝。

Boopathy。

+0

發表您的code.I假設您有一個擴展Fragment的類和一個使用setRetainInstance(true)擴展Fragment的其他靜態內部類! 然後你調用innerClass.setTargetFragment。 當外層碎片被破壞時會發生什麼? 的源代碼[這裏](http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/4.0.1_r1/android/support/v4/app/FragmentManager。 java#FragmentManagerImpl.saveAllState%28%29) – Davide

回答

0

我不確定你想要保存什麼以及你想保存它在哪裏。

官方的文檔指出:"A Fragment represents a behavior or a portion of user interface in an Activity."

使用Fragment作爲另一個片段的UI狀態的容器通常是一個壞主意。

如果要在整個活動生命週期(包括屏幕旋轉)中保留一些值,只需覆蓋onSaveInstanceState方法即可。如果你希望將一些變量存儲甚至在活動終身使用singelton類或Preferences,如果你想即使在應用程序的生命時間使用你的價值觀存儲SharedPreferences

請你exacly要

+0

我從網絡中檢索數據。在配置更改期間,片段和相應的活動將經歷生命週期。所以它再次從網絡加載。相反,我遵循這篇文章(http://www.androiddesignpatterns.com/2013/04/retaining-objects-across-config-changes.html),並將這些值保存在無頭文件中。現在我收到上述例外。希望我現在清楚! – Boopathy

2
做詳細說明

這裏有一個解決方法:

把這個片段中引起問題:

@Override 
public void onSaveInstanceState(final Bundle outState) { 
    setTargetFragment(null, -1); 
      ... 

,並記住,當你需要它來將其設置爲真正的目標片段。