【问题标题】:Overlay a Fragment over existing Fragment在现有 Fragment 上覆盖 Fragment
【发布时间】:2016-06-24 18:45:49
【问题描述】:

我有一个TabLayoutTabHost 的设计,你可以考虑。假设这是标签 -

Tab1 | Tab2 | Tab3 | Tab4 | Tab5

接下来的动作将发生-

  1. Tab1 - 打开 Fragment1
  2. Tab2 - 打开 Fragment2
  3. Tab3 - 在现有片段上打开一个叠加层,带有半透明黑色视图
  4. Tab4 - 打开 Fragment3
  5. Tab5 - 打开 Fragment4

关于如何解决这个问题的任何想法? 提前致谢!!

更新:我使用的解决方案

我试过这个,但必须进行大量定制。所以我在中间停了下来,因为工作量很大。所以我做的另一种方法是在与 Tab3 完全相同的位置上再放一个视图到 TabLayout 上,然后单击 View 我使覆盖视图可见。

【问题讨论】:

  • 您使用的是ViewPager吗?
  • 你正在使用ViewPager
  • 当用户通过滑动滚动页面时,这应该如何工作?覆盖应该从当前页面顶部的一侧滑动吗?或在滑动期间忽略选项卡 3
  • 我已经禁用了滑动。它的行为类似于TabHost
  • 不过没问题,设计就像从中间叠加

标签: android android-fragments android-viewpager android-tablayout fragment-tab-host


【解决方案1】:

ViewPager 不适用于此用例。选项卡会自动映射到 ViewPager 中的相应元素。但这是我如何看待它的工作方式。

  1. 有一个TranslucentOverlayView,其中有一个Visibility.GONE,它覆盖整个ViewPager
  2. 具有Tab3打开fragment2的重复克隆,选择tab3 @ TranslucentOverlayView可见。这确实意味着您将有两个单独的 fragment2 实例并排。

【讨论】:

  • 好建议试试这个...!!谢谢 :) 一旦我实施它就会投票
  • 检查问题。我已经用答案更新了它。感谢您的建议。如果我有时间实现它,它肯定会起作用:)
【解决方案2】:

正如@ZakTaccardi 所说,ViewPager 不是为此而设计的。

但是,我会尝试创建一个有 5 页的FragmentPagerAdapter。我的意思是,getCount() 应该返回 5。如果当前索引是 2,那么您应该返回当前在屏幕上的实例。这意味着,您的适配器应该知道当前页面是什么。您可以使用ViewPagers onPageChangeListener 让适配器知道当前页面是什么。要检索实例,请使用 FragmentManager。不要将片段的引用存储在适配器中,因为这会导致内存泄漏。这是为了防止在您选择选项卡 3 时出现重复的片段。

要显示叠加层,请在 ViewPager 之上实现 View,并在位置为 2 时在 ViewPageronPageSelected() 回调中显示它。当位置不是 2 时隐藏它。

【讨论】:

  • 检查问题。我已经用答案更新了它。感谢您的建议。如果我有时间实现它,它肯定会起作用:)
  • 您应该将其作为答案发布,而不是作为对您问题的更新。然后您将能够接受它,并且该问题将被视为“已回答”。目前它仍然是开放的。谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 2018-04-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多