2011-11-01 51 views
4

我正在解決ListFragments的一個奇怪問題。 我有一個簡單的FragmentActivity與一個FrameLayout巫婆是我的ListFragment容器。我使用我的自定義適配器來處理數據。一切都很好,直到我旋轉設備來改變方向。之後,列表視圖顯示兩次 - 一個列表與第二個列表重疊。當我滾動列表時,只有其中一個列表正在移動,它會創建如圖所示的人工製品。Android:ListFragment中ListView的項目與自己重疊

screenshot from emulator

我用來初始化在onCreateActivity適配器和我沒有做的onDestroy方法什麼。有什麼我應該做的onDestroy方法來清除列表。請問你有沒有遇到過這個問題?我真的不知道該怎麼辦。

謝謝!

+0

代碼,請... –

回答

6

對不起,我沒有附加代碼,但我真的不知道哪個部分可以做到這一點。但我終於明白了原因。

在父活動的onCreate方法我已經通過調用

if(mFragment == null) 
{ 
    mFragment = onCreatePane(); 

    getSupportFragmentManager() 
     .beginTransaction() 
     .add(R.id.root_container,mFragment) 
     .commit(); 
} 

創建一個片段予認爲測試null就足夠了。但片段內容會在Activity中(通過旋轉設備)調用onDestroy之後保留在FrameLayout中。這很奇怪,不是嗎?

我試圖把這個代碼onStop()

if(mFragment != null) 
{ 
    getSupportFragmentManager() 
     .beginTransaction() 
     .remove(mFragment) 
     .commit(); 
} 

,但結果是一樣的。我發現的唯一解決方法是用replace()方法替換add()方法。但有誰知道爲什麼刪除片段沒有幫助?爲什麼在銷燬Activity之後,片段的內容仍然在FrameLayout中?

再次感謝。

編輯:

現在我知道是什麼問題。我應該測試savedStateInstance == null而不是mFragment == null。如果我不這樣做,主要活動將從已保存的狀態恢復舊片段,並且它還會在我的onCreate方法中創建新的片段。

+0

救命,10倍:d –