Android 仅在一个方向上使用片段作为ListView标头

Android 仅在一个方向上使用片段作为ListView标头,android,android-layout,android-fragments,Android,Android Layout,Android Fragments,我正在尝试实施一项支持以下两个方向的活动: +--------------------------+ +-------------+---------------------------+ | | | | | | | | |

我正在尝试实施一项支持以下两个方向的活动:

+--------------------------+      +-------------+---------------------------+
|                          |      |             |                           |
|                          |      |             |                           |
|                          |      |             +--------           --------+
|   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)
我认为这是因为我在一个方向上手动加载一个片段,在另一个方向上自动从布局加载一个片段。我想不出一个办法来解决这个问题

我想到的一个解决方案是在XML中定义纵向布局,而不使用标题视图(标题不会随ListFragment滚动),然后在创建视图后立即将视图从ListFragment上方移动到标题视图中,但这没有起作用


这个设计注定要失败还是有人有聪明的解决方案?

我通过从片段中删除
id
s解决了这个问题。
FragmentManager
现在不再将它们视为相同的,因此不会引发异常。

您可以在更改方向之前从列表中删除标题视图


使用
adapter.removeeheader(view)
在适当的位置(
onStop
onDestroy
)我想事情会按照您的意愿进行。

我也尝试过,但没有成功。尽管视图已被移除,但碎片仍在周围。好吧,该死的。很高兴看到你找到了解决办法。