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
)我想事情会按照您的意愿进行。我也尝试过,但没有成功。尽管视图已被移除,但碎片仍在周围。好吧,该死的。很高兴看到你找到了解决办法。