我最近在这里问了一个关于片段的问题:
http://stackoverflow.com/questions/12443312/listview-not-populating-or-webview-taking-up-entire-screen
在经历了很多混乱之后,我发现问题是什么,但经过更多的愚弄和研究(其中正确的代码看起来与我的相同),我无法弄清楚我的问题是什么。
创建完所有内容后,我发现只有最后一个片段添加到事务中才可见。这是我添加它们的代码:
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>
我做错了什么,或者可以做些什么,以便正确添加两个片段并且可以正确看到?
答案 0 :(得分: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();
答案 1 :(得分:1)
要在一个布局中添加多个片段,您需要为每个片段调用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()
方法附加的,然后进一步添加另一个片段。