3

以下の 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 の上からヘッダー ビューに移動することでした。しかし、これはうまくいきませんでした。

この設計は失敗する運命にあるのでしょうか、それとも誰かが賢い解決策を持っていますか?

4

2 に答える 2

2

idフラグメントから s を削除することでこれを解決しました。はFragmentManagerそれらを同じものとして認識しなくなったため、例外をスローしません。

于 2012-08-03T13:05:40.000 に答える
0

向きを変更する前に、リストからヘッダー ビューを削除できます。

adapter.removeHeader(view)適切な場所(onStopまたは)で使用すると、思い通りonDestroyに機能すると思います。

于 2012-08-03T13:06:28.863 に答える