2012-09-16 76 views
4

最近,我問了一個問題有關片段在這裏:如何正確地將多個片段添加到片段轉換?

http://stackoverflow.com/questions/12443312/listview-not-populating-or-webview-taking-up-entire-screen 

很多搞亂後周圍,我發現了什麼問題,但更多的打打鬧鬧,和研究後(在正確的代碼似乎等同於雷),我無法弄清楚我的問題是什麼。

創建完所有內容後,我發現只有添加到事務中的最後一個片段可見。這是我的代碼添加它們:

FragmentManager manager = getFragmentManager(); 
    FragmentTransaction trans = manager.beginTransaction(); 
    UrlListFragment urlfragment = new UrlListFragment(); 
    MyWebFragment webfragment = new MyWebFragment(); 
    trans.add(R.id.fragment_container, urlfragment, "my_url_fragment"); 
    trans.add(R.id.fragment_container, webfragment, "my_web_fragment"); 
    trans.commit(); 

這是我主要的xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<FrameLayout 
    android:id="@+id/fragment_container" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</FrameLayout> 

我在做什麼錯了,還是可以做些什麼使這兩個片段添加正確並且可以正確地看到?

回答

5

不幸的是,你不能用這種方式使用片段,你只需要使用每個容器一個片段。無論如何,它將相當於相同的視覺佈局。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:orientation="horizontal" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<FrameLayout 
    android:id="@+id/fragment_container1" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</FrameLayout> 
<FrameLayout 
    android:id="@+id/fragment_container2" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" > 
</FrameLayout> 
</LinearLayout> 

FragmentManager manager = getFragmentManager(); 
FragmentTransaction trans = manager.beginTransaction(); 
UrlListFragment urlfragment = new UrlListFragment(); 
MyWebFragment webfragment = new MyWebFragment(); 
trans.add(R.id.fragment_container1, urlfragment, "my_url_fragment"); 
trans.add(R.id.fragment_container2, webfragment, "my_web_fragment"); 
trans.commit(); 
1

要添加一個佈局內的多個片段,你需要調用add()commit()方法爲每個片段。但是,如果你是在一個循環中添加你的片段,或者像下面這樣:

FragmentManager manager = getFragmentManager(); 
manager.beginTransaction().add(R.id.parentView, myFragment1, "fragment:1").commit(); 
manager.beginTransaction().add(R.id.parentView, myFragment2, "fragment:2").commit(); 

這也可能讓你陷入一些問題。因爲commit()方法不會立即添加片段,所以您需要確保先前的片段是從活動的onAttachFragment()方法中附加的,然後再進一步添加另一個片段。