如何正确地将多个片段添加到片段过渡?
Posted
技术标签:
【中文标题】如何正确地将多个片段添加到片段过渡?【英文标题】:How do I properly add multiple fragments to a fragment transition? 【发布时间】:2012-09-08 18:44:13 【问题描述】:我最近问了一个关于片段here的问题:
经过一番折腾,我发现了问题所在,但经过更多的胡闹和研究(其中正确的代码似乎与我的相同),我无法弄清楚我的问题是什么。
一切都创建完成后,我发现只有最后一个添加到事务的片段是可见的。这是我添加它们的代码:
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_
android:layout_>
<FrameLayout
android:id="@+id/fragment_container"
android:layout_
android:layout_ >
</FrameLayout>
</LinearLayout>
我做错了什么,或者可以做些什么才能正确添加两个片段并且可以正确查看?
【问题讨论】:
【参考方案1】:不幸的是,您不能以这种方式使用片段,您只需要每个容器使用一个片段。无论如何,这将构成相同的视觉布局。
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="horizontal"
android:layout_
android:layout_>
<FrameLayout
android:id="@+id/fragment_container1"
android:layout_
android:layout_ >
</FrameLayout>
<FrameLayout
android:id="@+id/fragment_container2"
android:layout_
android:layout_ >
</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();
【讨论】:
【参考方案2】:要在一个布局中添加多个片段,您需要为每个单独的片段调用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()
方法附加的,然后进一步添加另一个片段。
【讨论】:
如果我使用executePendingTransactions()
首次提交myFragment1
,对您提到的问题有帮助吗?以上是关于如何正确地将多个片段添加到片段过渡?的主要内容,如果未能解决你的问题,请参考以下文章