これは実際に Android API のバグなのだろうかと思っています。
私の設定は次のようになっています:
┌----┬---------┐
| | |
| 1 | 2 |
| |┌-------┐|
| || ||
| || 3 ||
└----┴┴-------┴┘
- 右ペインにフラグメント #2 (検索画面) を読み込むメニューです。
- 結果リストであるフラグメント #3 を含む検索画面です。
- 結果リストは、複数の場所で使用されます (それ自体が機能する高レベルのフラグメントとして使用される場合もあります)。
この機能は、携帯電話でも問題なく動作します (1、2、3 はActivityFragment
s です)。
ただし、このコードを使用した場合:
FragmentTransaction transaction = getSupportFragmentManager().beginTransaction();
Fragment frag = new FragmentNumber2();
if(toLoad != null) frag.setArguments(toLoad);
transaction.replace(R.id.rightPane, frag);
transaction.commit();
ここでR.id.leftPane
、および は水平方向の線形レイアウト内の ですR.id.rightPane
。<fragment>
上記のコードは、既存のフラグメントを削除し、新しいフラグメントに置き換えるものだと理解しています。素晴らしい... 明らかに、これは起こりません。このコードを 2 回目に実行すると、次の例外が発生します。
07-27 15:22:55.940: ERROR/AndroidRuntime(8105): Caused by: java.lang.IllegalArgumentException: Binary XML file line #57: Duplicate id 0x7f080024, tag null, or parent id 0x0 with another fragment for FragmentNumber3
これは、FragmentNumber3のコンテナが複製され、一意のIDがなくなったために発生します。新しいフラグメントが追加される前に、最初のフラグメントが破棄されていない(?)と考えられます(私の考えでは、それは交換された)。
これが可能かどうか誰か教えてください(この答えそうではないことを示唆しています)、それともバグですか?
ベストアンサー1
ネストされたフラグメントは現在サポートされていません。フラグメントを別のフラグメントの UI 内に配置しようとすると、未定義の動作が発生し、動作が壊れる可能性があります。
アップデート: ネストされたフラグメントサポートされているAndroid 4.2 (および Android サポート ライブラリ rev 11) 以降:http://developer.android.com/about/versions/android-4.2.html#ネストフラグメント
注記(このドキュメント):"注: レイアウトに が含まれている場合、レイアウトをフラグメントにインフレートすることはできません<fragment>
。ネストされたフラグメントは、フラグメントに動的に追加された場合にのみサポートされます。「