2013-02-11 61 views
3

我想在位於1個活動中的2個片段之間切換,所以其他片段應該總是替換當前的片段。我不能找到我的錯誤雖然:(以編程方式在片段之間切換

我的主要活動:

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_layout); 

    Fragment fragment = new FirstFragment(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.add(R.id.container, fragment, "first"); 
    transaction.addToBackStack(null); 
    transaction.commit(); 
} 

我activity_layout:現在

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" 
xmlns:tools="http://schemas.android.com/tools" 
android:id="@+id/container" 
android:layout_width="match_parent" 
android:layout_height="match_parent" 
tools:context=".MainActivity" 
tools:ignore="MergeRootFrame" /> 

,在FirstFragment(邏輯中的某一點,工作正常),正在調用以下方法

private void startSecondFragment(){ 

    Fragment fragment = new SecondFragment(); 
    FragmentTransaction transaction = getChildFragmentManager().beginTransaction(); 
    transaction.add(R.id.container, fragment, "second"); 
    transaction.addToBackStack(null); 
    transaction.commit(); 

} 

此函數完成時沒有錯誤,然而事後右下面的異常是越來越拋出:現在

02-11 13:40:30.533: E/AndroidRuntime(907): java.lang.IllegalArgumentException: No view found for id 0x7f070000 (com.myexample.app:id/container) for fragment SecondFragment{412c9388 #0 id=0x7f070000 second} 

,好像它不能夠找到在這一點上的ID爲「容器」(第一個片段已取代此容器)。我怎樣才能真正取代的第一個片段?

回答

3

它應該是這樣的:

private void startSecondFragment(){ 

    Fragment fragment = new SecondFragment(); 
    FragmentTransaction transaction = getSupportFragmentManager().beginTransaction(); 
    transaction.add(R.id.container, fragment, "second"); 
    transaction.addToBackStack(null); 
    transaction.commit(); 

} 

你不想讓孩子的FragmentManager,因爲你的片段是在你的活動,所以你需要同fragmentManager。