使用片段布局

时间:2013-04-07 19:28:38

标签: android android-fragments android-fragmentactivity fragmenttransaction fragmentmanager

我的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();
 }

我不明白的是以下几行:

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

R.id.fragment_contentFrameLayout,这会将片段插入FrameLayout还是什么?

2 个答案:

答案 0 :(得分:0)

  

R.id.fragment_content是一个FrameLayout?这会将片段插入到framelayout中还是什么?

从我的记忆中,片段布局被置于其上。在它下面,它有另一种布局,它是贴在容器布局上的“贴纸”。所以它在某种程度上是一块蛋糕。 为了掌握那个“贴纸”,我想,你可以在片段的根视图上调用.getParent()

哦,标记片段可以通过FragmentManager轻松找到它们(虽然标签查找有点贵)。

答案 1 :(得分: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