簡體   English   中英

方向更改時列表片段中列表視圖行的重復

[英]Duplication of listview rows in list fragment on orientation change

我有一個ListFragment,我使用自定義適配器來填充listview。 一切順利,直到我改變方向和滾動。 然后它看起來像這樣: 一些方向更改后的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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM