1

Support4Demos 具有 Fragment 堆栈...但方便地将 pop/push CountingFragment 控件放置在堆栈之外(所有都发生在一个布局中,但 push/pop 按钮在下方,仍然在包含整个布局的 Fragment 中。

如何控件从顶部片段开始工作?

[编辑]另一种看待它的方式:
我想让堆栈上的片段表现得像活动,每个都可以弹出自己,或者启动另一个。
你将如何改变“FragmentStack”示例来自 Support4Demos 以便“回家”/“添加新”/“弹出顶部”按钮在 CountingFragments 中,而不是在包含 FragmentManager 的 FragmentStackSupport 中?
合理的设计 - 考虑“CountingFragments”包含可点击的 ListViews?

怎么做?理想情况下,每个堆栈片段都将包含对“堆栈持有者”片段或其(子)片段管理器的引用。但是,那些不是 Parcelable,并且不能使用片段构造函数(尽管当我这样做时其他一切都很好) .持有对它的引用也很糟糕,因为“堆栈持有者”片段也可以被销毁和重新创建。


[EDIT2]
好的,这是我想出的一些想法。

  • 对于“回家”和“弹出顶部”,我想我可以将那些(不可见的)按钮添加到托管片段,然后通过getWindow().getDecorView().findViewById或类似的方式在托管片段中访问它们。
    这已经够丑了。但是推新的?我能想到的唯一相关的事情是将自定义 View 类添加到托管布局中,该类包含对 FragmentManager 的引用,以供托管的 Fragment 抓取。
  • 在某处的静态地图中保存对 FragmentManager(s) 的引用
  • 在托管片段中注册一个广播接收器,发送带有来自托管片段的数据的广播,告诉它要做什么。但是宿主 Fragment 不应该照看它的孩子。
  • 让每个堆叠的 Fragment 本身托管其真实内容或下一个堆叠的 Fragment。这样,手头总是有一个 FragmentManager(除了弹出),但每页需要 2 个 Fragment,更不用说这一切的怪异了。

请告诉我有更清洁的方法。

4

0 回答 0