1. ホーム
  2. android

[解決済み] 断片の中の断片

2022-05-06 14:56:22

質問

実はAndroid APIのバグなのでは?

このような設定にしています。

┌----┬---------┐
|    |         |
|  1 |    2    |
|    |┌-------┐|
|    ||       ||
|    ||   3   ||
└----┴┴-------┴┘

  1. 右ペインにフラグメント#2(検索画面)をロードするメニューです。
  2. は検索画面であり、結果一覧であるフラグメント#3が含まれています。
  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.leftPaneR.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を持たなくなったために起こります。新しいフラグメントが追加される前に、最初のフラグメントが破壊されていない(私の考えでは、それはつまり 置き換え ).

誰か教えてくれませんかね( この回答 それともバグですか?

解決方法は?

ネストされたフラグメントは現在サポートされていません。 他のフラグメントの UI 内にフラグメントを配置しようとすると、未定義の動作になり、破損する可能性が高くなります。

<ブロッククオート

更新 : ネストされたフラグメント がサポートされています。 Android 4.2 (およびAndroid Support Library rev 11)時点のものです。 http://developer.android.com/about/versions/android-4.2.html#NestedFragments

ノート (による このドキュメント ): " 注:レイアウトがフラグメントに含まれる場合、そのレイアウトを膨らませることはできません。 <fragment> . ネストされたフラグメントは、動的にフラグメントに追加された場合のみサポートされます。 "