[英]Duplication of listview rows in list fragment on orientation change
我有一個ListFragment,我使用自定義適配器來填充listview。 一切順利,直到我改變方向和滾動。 然后它看起來像這樣:
我猜這與我對視圖持有人摸索有關,但我現在無法訪問代碼。
重疊片段的原因是我使用了FrameLayout並使用FragmentTransition.add(...)添加了片段。 當我將.add()更改為.replace()時,舊片段被刪除,新片段被添加,我的問題解決了。
我有類似的問題,根據我說的是解決方案: - 你得到這個模糊因為listfragment創建的方向改變的地方新的實例每次(可能它是在OnCreate中()),所以你必須只是讓一次列表片段的實例,並且在方向更改時替換該片段而不是再次添加。
除非包含此方法,否則更改方向會導致onCreate重新啟動
public void onConfigurationChanged(Configuration newConfig)
{
super.onConfigurationChanged(newConfig);
}
並將其放入清單的活動部分
android:configChanges="orientation"
檢查這是第一次調用onCreate(),換句話說,確定回調是否不是由於屏幕旋轉引起的。
protected void onCreate(Bundle savedInstanceState) {
if(savedInstanceState == null) {
// transition.add(Your fragment,...)
}
}
我有同樣的問題,因為FrameLayout的使用,首先你必須檢查你的片段是否已添加到活動中:
String TagName = "F";
添加沒有UI的片段如果您想稍后從活動中獲取片段,則需要使用findFragmentByTag()。 “Google” 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,就是這樣。 但在我看來,由於片段的多個實例,這不是最好的解決方案。
希望這有幫助;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.