以下の 2 つの方向性をサポートするアクティビティを実装しようとしています。
+--------------------------+ +-------------+---------------------------+
| | | | |
| | | | |
| | | +-------- --------+
| Header View | | | |
| (from fragment) | | | |
| | | Fragment +-------- --------+
+--------------------------+ | | |
| | | | ListFragment |
| | | | |
+--------- --------+ | +-------- --------+
| ListFragment | | | |
| | | | |
+--------- --------+ +-------------+---------------------------+
| |
| |
+--------------------------+
レイアウト XML で定義されたフラグメントをあらゆる場所で使用する場合、これは難しくありません。課題は、ヘッダー フラグメントを ListFragment と一緒に縦方向にスクロールしたいという事実から来ています。これを実現するために、XML を自分で膨らませ、ヘッダー ビューとして追加しています。これも機能しますが、デバイスを回転させるまで (縦から横に、逆に回転させると)、次の例外が発生します。
Caused by: java.lang.IllegalArgumentException: Binary XML file line #3: Duplicate id 0x7f06002d, tag null, or parent id 0x0 with another fragment for com.example.MyHeaderFragment
at android.support.v4.app.FragmentActivity.onCreateView(FragmentActivity.java:275)
at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:558)
これは、ある方向でフラグメントを手動でロードし、別の方向でレイアウトから自動的にロードしているという事実から来ていると思います。これを回避する方法は考えられません。
私が考えた 1 つの解決策は、ヘッダー ビューを使用せずに XML で縦長のレイアウトを定義し (ヘッダーは ListFragment でスクロールしません)、ビューが作成されるとすぐにビューを ListFragment の上からヘッダー ビューに移動することでした。しかし、これはうまくいきませんでした。
この設計は失敗する運命にあるのでしょうか、それとも誰かが賢い解決策を持っていますか?