Viewpager与不同菜单和公共工具栏不起作用。

10 浏览
0 Comments

Viewpager与不同菜单和公共工具栏不起作用。

我的应用程序中有选项卡。每个选项卡都有不同的片段和不同的菜单。下面是我使用的布局:



    
        
            
        
        
        
    
    
        
        
    

现在在每个片段的`onCreate()`方法中,我都已经设置了`setHasOptionsMenu(true);`。此外,我重写了每个片段的`onCreateOptionsMenu()`方法,其中包含了`menu.clear();`作为第一步,然后调用其父构造函数,最后加载片段自己的菜单xml。但是我得到的结果是这样的:

- 假设有5个选项卡。第2个和第3个选项卡都有一个包含两个更多片段的viewpager。

- 第1个选项卡没有菜单。

- 第2个选项卡有menu_2(仅适用于第2个子片段)。

- 第3个选项卡再次没有菜单。

- 第4个选项卡有menu_4(仅适用于第1个子片段)。

- 第5个选项卡有menu_5。

- 最初,选项卡1应该没有菜单,这是正常的。然后直接切换到选项卡3时,它显示menu_4,而默认情况下应该没有菜单。然后滑动到选项卡4,它会显示正确的menu_4,然后滑动回选项卡3时,它将不显示菜单(这是所需的)。

- 对于选项卡5也是同样的情况。如果我切换到第2个选项卡中的第2个子片段,那么与第1个选项卡观察到相同的行为。

简而言之,根据我的观察,它显示了相邻选项卡的菜单,这实际上是在当前片段之后执行的,因此会出现这种行为。

那么如何避免这种情况呢?

0
0 Comments

问题的原因是在Viewpager嵌套Viewpager的情况下,invalidateOptionsMenu方法无法正常工作。解决方法是设置所有屏幕外的fragment和subfragment的setHasOptionsMenu为false,并在ViewPager切换页面时调用invalidateOptionsMenu方法。

具体的解决方法如下:

1. 在Activity的XML布局文件中添加TabLayout和ViewPager。

2. 在Activity的Java类中,设置ViewPager的适配器和页面切换监听器。

3. 在页面切换监听器的onPageSelected方法中,调用invalidateOptionsMenu方法,参数为当前页面的位置。

4. 在invalidateOptionsMenu方法中,遍历所有的fragment和subfragment,将它们的setHasOptionsMenu设置为当前页面是否为其对应的位置。

5. 调用invalidateOptionsMenu方法。

这样可以解决在Viewpager嵌套Viewpager的情况下,不同菜单和共同工具栏无法正常工作的问题。如果有多个Viewpager嵌套的情况,可以将菜单设置为可见或不可见来实现不同的功能需求。

0