2011-08-21 195 views
4

在開發人員指南中,據說可以在運行時以編程方式將Fragment添加到現有的ViewGroup。我的問題是:這個ViewGroup如何鏈接到應用程序?將片段添加到ViewGroup

到目前爲止,我試圖在描述應用程序佈局的xml文件中聲明ViewGroup。但是,當我嘗試使用public abstract FragmentTransaction add (int containerViewId, Fragment fragment, String tag)函數向其添加Fragment時,我的應用程序崩潰(不立即,但在我的應用程序的onCreate函數結束時)。

我實際上想要做的是在我的應用程序中管理多個視圖(實現爲Fragment),並根據用戶的選擇在它們之間切換。我應該在我的方法中添加(或更改)什麼?

在此先感謝您花費時間來幫助我。

+0

在Eclipse中使用'adb logcat',DDMS或DDMS透視圖來檢查LogCat並查看與崩潰相關的堆棧跟蹤。 – CommonsWare

回答

5

的ViewGroup可以是簡單的框架佈局

<FrameLayout 
android:id="@+id/fragmentForChange" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent" 
/> 

然後和你一起片段,你需要做的替換此框架NEX:

Bundle args = new Bundle();   
// add needed args 

//create fragment and set arguments  
Fragment fragment= MyFragment(); 
fragment.setArguments(args) 

FragmentTransaction ft = getSupportFragmentManager().beginTransaction(); 
// getSupportFragmentManager - uses for compatible library instead of getFragmentManager 

//replace frame with our fragment 
ft.replace(R.id.fragmentForChange,fragment); 
//set type of animation 
ft.setTransition(FragmentTransaction.TRANSIT_FRAGMENT_FADE); 

//finish transaction 
ft.commit(); 

您可以隱藏或交易的演出片段,片段命令:

ft.hide(fragment);   
ft.show(fragment);   
+0

添加不會取代。 –

1

我不知道你的死機原因可能是什麼,因爲你沒有提供詳細信息s,只是給你發一條提示(它對我很有用,而且不像Fragment API那麼直觀)。請記住,在FragmentTransaction中創建的Fragment不是立即添加的,而是根據其自己的判斷(稍後,可能在UI線程不忙時),因此片段的getView()調用可能會在一段時間內返回null ,這可能是導致事故的原因。

我不明白爲什麼Google這樣設計它,因爲其餘的API是同步的 - 而且更加令人困惑 - 如果您創建Fragment作爲XML佈局的一部分(使用inflater),它會被創建同步以及getView總是返回值。

這是可能的解決方法:如果您將ViewGroup創建爲另一種佈局通貨膨脹處理的一部分,它可能適用於您。