【问题标题】: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_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>

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

【问题讨论】:

    标签: layout view transactions fragment


    【解决方案1】:

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

    <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();
    

    【讨论】:

      【解决方案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,对您提到的问题有帮助吗?
      猜你喜欢
      • 2018-04-02
      • 2017-04-14
      • 1970-01-01
      • 1970-01-01
      • 2016-06-27
      • 2012-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多