2013-08-06 35 views
0

當用戶單擊一個片段中的ListView中的元素時,通過接口通知偵聽器,並且它應該更改菜單旁邊的片段。使用FragmentTransaction更改片段不起作用?

我當前的代碼看起來像這樣

Fragment f = null; 

switch(fragmentId) { 
    case 0: 
     f = new xFragment(); 
     break; 
    case 1: 
     f = new yFragment(); 
     break; 
    ... 
} 

System.out.println(f.getClass().getName()); // Prints the name of the class correctly 

FragmentTransaction transaction = getFragmentManager().beginTransaction(); 
transaction.replace(R.id.fragmentContainer, f); 
transaction.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 
transaction.commit(); 

當我從菜單中選擇一些選項,這個功能在包含被稱爲片段的活性。它正確地打印fragmentId並且類的名稱是正確的,如代碼示例中所述。

但是,片段沒有改變。我試圖用new xFragment()替換replace方法中的f變量,但它沒有幫助。

XML佈局文件看起來像這樣。

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:orientation="horizontal" > 

    <fragment 
     android:id="@+id/menuFragment" 
     android:layout_width="300dp" 
     android:layout_height="match_parent" 
     android:name="fi.peltoset.mikko.home.Navigation" /> 

    <LinearLayout 
     android:id="@+id/fragmentContainer" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     android:layout_margin="10dp" 
     android:orientation="vertical" > 
    </LinearLayout> 
</LinearLayout> 

LinearLayout fragmentContainer是碎片的容器。

在啓動時,我使用與上面顯示的代碼相同的代碼,除了在應用程序啓動時將replace更改爲add以添加正確的片段。這工作正常。

怎麼了?

+0

您使用的Android SDK的版本? – Weibo

回答

0

首先,「fragmentContainer」本身不是一個片段。另外,你不能相互替換靜態片段。它們必須是「動態添加」的片段。看看this post

要替換動態創建的片段,請看this post

+0

是的,事實並非如此。我知道我不能替換在XML佈局中創建的片段。正如我所說的,片段被動態添加到LinearLayout。您的第二個鏈接不是SO帖子,也沒有說明如何替換動態創建的片段。 – MikkoP

+0

對不起,第一個鏈接是SO帖子,而不是第二個鏈接。 – MiStr

+0

您是否嘗試過渡? – MiStr

0

您是否試圖替換ID爲'menuFragment'的片段?如果是這樣,那麼你不能這樣做,因爲在XML佈局中指定的任何片段都不能被替換。

+0

不,我不是。我試圖在LinearLayout'fragmentContainer'中替換動態添加的片段。 – MikkoP

0

您定位的Android版本是?

嘗試使用支持片段經理:

FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();

http://developer.android.com/reference/android/support/v4/app/FragmentActivity.html#getSupportFragmentManager()

+0

最小值爲14,目標值爲17.如果我嘗試使用'getSupportFragmentManager()'方法,則Eclipse會報錯。它適用於哪個級別? – MikkoP

+0

getSupportFragmentManager適用於API級別10及更低版本,如果最小值爲14,則不需要它。您可以發佈更多代碼嗎?你的片段是什麼樣的?我沒有發現您發佈的代碼段有任何問題。 – blackcj