如何正确地将多个片段添加到片段过渡?

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,对您提到的问题有帮助吗?

以上是关于如何正确地将多个片段添加到片段过渡?的主要内容,如果未能解决你的问题,请参考以下文章

如何有条件地将 C 代码片段编译到我的 Perl 模块?

如何共享元素从片段到活动的过渡

如何从片段获取数据到活动? [复制]

如何从片段获取数据到另一个活动? (不是容器活动)[重复]

嵌套片段过渡不正确

java 将循环显示和不显示过渡动画添加到Android片段