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