0

我的 Android 应用程序要求某个流程有 7 个不同的屏幕。现在每个屏幕都有一个共同的顶部和底部。所以我选择创建一个FragmentActivity和 7 个不同的Fragments. 如何FragmentActivity在运行时将片段插入?我在这里阅读了本教程,根据本教程,我的 mainFragmentActivity应该具有以下布局:

<?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_content是 a FrameLayout,这会将片段插入FrameLayout还是什么?

4

2 回答 2

0

R.id.fragment_content 是 FrameLayout 吗?这会将片段插入框架布局还是什么?

据我所知,片段布局被放置在它之上。在它下面,它有另一个布局,它是一个“贴纸”,将它粘到容器布局上。所以它在某种程度上是一个蛋糕。我认为,要获得该“贴纸”,您可以调用.getParent()片段的根视图。

哦,并且标记片段可以轻松找到它们FragmentManager(尽管标记查找有点贵)。

于 2013-04-07T19:57:54.670 回答
0

您可以将其视为您有一个FrameLayout可以将玩具船扔到(您的)中的池(在本例中为您的Fragments)。所以基本上你需要一个环境来容纳你Fragments,它可以是你选择的任何布局。

所以你在这里做什么:

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

是错误的,因为R.id.fragment_contentis not a Fragmentbut a 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

于 2013-04-07T20:05:38.003 回答