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

残念ながら、この方法でフラグメントを使用することはできません。コンテナごとに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();
于 2012-10-09T13:32:25.080 に答える
3

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

于 2014-08-13T01:37:55.823 に答える