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