0

我的Android應用程序有一個要求,其中某個流程有7個不同的屏幕。現在每個屏幕都有一個共同的頂部和底部。所以我選擇創建一個FragmentActivity和7個不同的Fragments。如何在運行時將片段插入FragmentActivity?我已閱讀本教程here,並按照本教程中我的主要FragmentActivity應具有以下佈局:使用片段佈局

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

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

</LinearLayout> 

它應該使用下面的代碼替換片段:

FragmentManager fm = getSupportFragmentManager(); 
Fragment fragment = fm.findFragmentById(R.id.fragment_content); 

if (fragment == null) { 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.add(R.id.fragment_content, new BasicFragment()); 
    ft.commit(); 
} 

什麼我不「T明白的是下面的行:

ft.add(R.id.fragment_content, new BasicFragment()); 

R.id.fragment_contentFrameLayout,將這種插入片段變成FrameLayout還是什麼?

+0

應該使用'tag'識別'Fragment'。如果你的'Fragment's在xml中,你可以使用'id',這裏不是這種情況,你可以通過編程方式添加它們(更好的方法)。 – 2013-04-07 19:44:11

回答

0

R.id.fragment_content是一個FrameLayout?這會插入片段到framelayout或什麼?

從我記得碎片佈局被放置在它的頂部。在它下面,它有另一個佈局,它是一個「粘貼」到容器佈局的貼紙。所以這是一種方式的蛋糕。 爲了得到這個「貼紙」的保留,我想,你可以在片段的根視圖上調用.getParent()

哦,標籤片段可以通過FragmentManager輕鬆找到它們(雖然標籤查找有點貴)。

0

你可以看看這個像你有一個游泳池(在這種情況下你的FrameLayout),你可以扔玩具船(Fragments)。所以基本上你需要一個環境來包容你Fragments,它可以是你選擇的任何佈局。

你正在做的那麼這裏:

Fragment fragment = fm.findFragmentById(R.id.fragment_content); 

是錯誤的,因爲R.id.fragment_content不是Fragment而是FrameLayout

,但也可能是你Fragment容器,所以,你需要創建一個類,extends Fragment與它自己的佈局,你在這裏做的工作:

FragmentManager fm = getSupportFragmentManager(); 
FragmentTransaction ft = fm.beginTransaction(); 
ft.add(R.id.fragment_content, new BasicFragment(), tag); //add a tag to a fragment during the transaction so you could easily retrieve it later. 
ft.commit(); 

,當然你可以瞭解很多有關片段閱讀此頁:

http://developer.android.com/guide/components/fragments.html