在现有片段上覆盖片段

时间:2016-06-24 18:45:49

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

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

Tab1 | Tab2 | Tab3 | Tab4 | Tab5

接下来将采取行动 -

  1. Tab1 - 打开Fragment1
  2. Tab2 - 打开Fragment2
  3. Tab3 - 在半透明黑色视图的现有片段上打开叠加
  4. Tab4 - 打开Fragment3
  5. Tab5 - 打开Fragment4
  6. 有关如何解决此问题的任何想法? 在此先感谢!!

    更新:我使用的解决方案

    我试过这个,但不得不做很多自定义。所以我在中间停了下来,因为这是很多工作。另外,我做的另一种方法是在TabLayout上放置一个与Tab3完全相同位置的视图,点击View我使叠加视图可见。

2 个答案:

答案 0 :(得分:0)

ViewPager不适用于此用例。标签会自动映射到ViewPager中的相应元素。但是,我在这里看到它的工作方式。

  1. TranslucentOverlayView Visibility.GONE覆盖整个ViewPager
  2. 让tab3打开fragment2的重复克隆,选择tab3后,TranslucentOverlayView可见。这确实意味着您将并排有fragment2两个独立的实例。

答案 1 :(得分:0)

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

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

要显示叠加层,请在View之上实施ViewPager,并在位置为2时在onPageSelected()的{​​{1}}回调中显示。隐藏它这个职位不是2。