2012-08-30 21 views
9

我有一個ListFragment,我使用自定義適配器來填充列表視圖。一切都很好,直到我改變方向和滾動。然後它看起來像這樣: ListView after a few orientation changes在方向變化的列表片段中重複列表視圖行

我猜測它與我查看與視圖持有人摸索,但我現在無法訪問代碼。

+0

可能重複[Android ListFragment列表視圖重疊的方向更改](http://stackoverflow.com/questions/11209412/android-listfragment-list-view-overlapping-on-orientation-change) – Qw4z1

回答

14

的原因重疊片段的活性部分是我使用的FrameLayout並使用FragmentTransition.add(...)添加片段。當我將.add()更改爲.replace()時,刪除了舊片段,並添加了新片段,解決了我的問題。

0

改變方向導致的onCreate重新啓動,除非你有這種方法

public void onConfigurationChanged(Configuration newConfig) 
{ 
    super.onConfigurationChanged(newConfig); 
} 

,並把這個在你的清單

android:configChanges="orientation" 
+0

是的,但是問題是爲什麼它重疊舊的佈局。答案在於重複的問題。無論如何感謝提示! – Qw4z1

2

我有類似的問題,並根據我說的解決方案: - 你會得到這個模糊,因爲每次方向改變某處某處創建了一個新的listfragment實例(可能是oncreate()),所以你只需要創建一個列表片段的實例,並在方向更改時替換該片段而不是再次添加。

0

檢查這是第一次調用onCreate(),換句話說,確定回調是否不是由於屏幕旋轉。

protected void onCreate(Bundle savedInstanceState) { 
     if(savedInstanceState == null) { 
    // transition.add(Your fragment,...) 
    } 
} 
0

我有同樣的問題,其原因的FrameLayout用法, 首先,你必須檢查你的片段已經加入到活動:

String TagName = "F"; 

添加一個碎片,無UI如果您想稍後從活動中獲取片段,則需要使用findFragmentByTag()。 「谷歌」 http://developer.android.com/guide/components/fragments.html#Adding

Fragement F = getFragmentManager().findFragmentByTag(TagName); 

然後檢查

if(F == null) { 
    F = new F(); 
    getFragmentManager() 
    .beginTransaction() 
    .add(R.id.container, F, TagName) 
    .commit(); 
} 

這裏的目標是使用時要避免添加或創建的片段,配置變化,這會導致該問題過程中仍然存在的新實例FrameLayout作爲容器。

解決方案2(簡單): 您唯一需要做的就是將您的容器更改爲ex:LinearLayout,就是這樣。但在我看來,這不是最好的解決方案,因爲片段的多個實例。

希望得到這個幫助;