これが実際に 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 がなくなったためです。最初の Fragment は、新しいものが追加される前に破棄されていません (?) (つまり、置き換えられていないということです)。
これが可能かどうかを誰かに教えてもらえますか(この回答はそうではないことを示唆しています)、それともバグですか?