2013-08-30 97 views
1

我想將嵌套的子片段添加到父片段中。編程將片段添加到LinearLayout

所有工作正常,但....

起初,我的代碼:

public class FragmentDatasheetWithHeader extends Fragment { 
    private long mRowId; 
    private String mSid; 

    @Override 
    public View onCreateView(final LayoutInflater inflater, final ViewGroup container, final Bundle savedInstanceState) { 

     final ScrollView scrollView = new ScrollView(getActivity()); 
     final LinearLayout linearLayout = new LinearLayout(getActivity()); 
     linearLayout.setId(4711); 
     linearLayout.setOrientation(LinearLayout.VERTICAL); 

     scrollView.addView(linearLayout); 

     createUI(); 

     return scrollView; 
    } 

    private void createUI() { 

     final FragmentProductDetailHeader fragmentHeader = FragmentProductDetailHeader.newInstance(this.mRowId, FragmentProductDetailHeader.HEADERTYPE_SMALL); 
     final FragmentDatasheet fragmentDatasheet = FragmentDatasheet.newInstance(this.mRowId, this.mSid); 

     final FragmentManager fragmentManager = getChildFragmentManager(); 
     fragmentManager.beginTransaction().add(4711, fragmentHeader, "fragmentHeader").commit(); 
     fragmentManager.beginTransaction().add(4711, fragmentDatasheet, "fragmentDatasheet").commit(); 
    } 
} 

現在我的問題:

在我啓動「開發者選項不保留活動(銷燬每當用戶離開它時的活動)「

當FragmentDatasheetWithHeader的活動打開並且應用程序進入後臺並返回前臺時,嵌套ed碎片增加了一倍。但只有嵌套Fragments的容器是LinearLayout纔會出現。如果容器是一個FrameLayout,嵌套的Fragments不會加倍。

怎麼回事?

+0

嘗試用替換替換添加。 – Leandros

+0

它解決了我的問題,但現在我只看到最後一個碎片不是兩個:-( –

回答

2

如果容器是FrameLayout,則嵌套的Fragments不會加倍。

這可能是不正確的。新碎片更有可能只是坐在舊碎片之上,有效地遮蔽了它們。因此,潛在的問題可能是相同的,由於各種ViewGroup實施如何安排他們的子女,視覺效果是不同的。也就是說,有一種簡單的方法可以告訴你的片段是否是新創建的,或者是從以前的狀態中恢復的:通過查看Bundle savedInstanceState參數,該參數被傳入onCreateView()(以及其他各種各樣的生活週期相關的方法,如onActivityCreate()等)。

更具體地說,你可能會想這樣的事情添加到onCreateView()

if (savedInstanceState == null) createUI(); 

這樣,當沒有先前的狀態,從恢復片段將只被添加。如果有以前的狀態,框架應該恢復舊的碎片。在後一種情況下,您可以通過標記查找恢復的片段。