6

我最近在这里问了一个关于片段的问题:

在搞砸了很多之后,我发现了问题所在,但经过更多的胡闹和研究(其中正确的代码似乎与我的相同),我无法弄清楚我的问题是什么。

创建完所有内容后,我发现只有最后添加到事务中的片段是可见的。这是我添加它们的代码:

FragmentManager manager = getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
UrlListFragment urlfragment = new UrlListFragment();
MyWebFragment webfragment = new MyWebFragment();
trans.add(R.id.fragment_container, urlfragment, "my_url_fragment");
trans.add(R.id.fragment_container, webfragment, "my_web_fragment");
trans.commit();

这是我的主要 xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:orientation="horizontal"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <FrameLayout
        android:id="@+id/fragment_container"
        android:layout_width="match_parent"
        android:layout_height="match_parent" >
    </FrameLayout>
</LinearLayout>

我做错了什么,或者可以做什么才能正确添加两个片段并且可以正确看到?

4

2 回答 2

6

不幸的是,您不能以这种方式使用片段,每个容器只需要使用一个片段。无论如何,它将相当于相同的视觉布局。

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<FrameLayout
    android:id="@+id/fragment_container1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</FrameLayout>
<FrameLayout
    android:id="@+id/fragment_container2"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
</FrameLayout>
</LinearLayout>

FragmentManager manager = getFragmentManager();
FragmentTransaction trans = manager.beginTransaction();
UrlListFragment urlfragment = new UrlListFragment();
MyWebFragment webfragment = new MyWebFragment();
trans.add(R.id.fragment_container1, urlfragment, "my_url_fragment");
trans.add(R.id.fragment_container2, webfragment, "my_web_fragment");
trans.commit();
于 2012-10-09T13:32:25.080 回答
3

要在一个布局中添加多个片段,您需要为每个单独的片段调用add()commit()方法。但是,如果您要在循环中添加片段,或者例如如下所示:

FragmentManager manager = getFragmentManager();
manager.beginTransaction().add(R.id.parentView, myFragment1, "fragment:1").commit();
manager.beginTransaction().add(R.id.parentView, myFragment2, "fragment:2").commit();

这也可能让你陷入一些问题。由于该commit()方法不会立即添加片段,因此您需要确保前一个片段是从活动的onAttachFragment()方法附加的,然后进一步添加另一个片段。

于 2014-08-13T01:37:55.823 回答