Android:从 viewPager 选项卡片段之一启动片段时隐藏 viewPager 选项卡

Android: Hide viewPager tabs when launching a fragment from one of the viewPager tab fragment

我的应用程序中有一个 viewPager,它有多个选项卡。在某些选项卡中,单击一个项目会显示一个新片段。我想让这个片段覆盖标签。这样做是可能的,但这些方法对我来说不太好。

1.) 一种方法是使用 getSupportFragmentManager() 将新创建的片段添加到 activity。这解决了问题,但看起来不是一个好主意,因为它会在使用后退按钮等时产生问题。

2.) 另一种方法是使用 Visibilty.GONE 手动隐藏选项卡,但这种方法的问题是选项卡的这种隐藏是可见的,我的意思是可以看到动画并且看起来很糟糕。

有没有更好的方法来解决这个问题?

这是我的代码。 “sub_fragment_container”出现在 activity xml 中,所以我得到一个错误 java.lang.IllegalArgumentException: No view found for id 0x7f0e00ff (com.my.app:id/sub_fragment_container) for fragment DetailFragment{

FragmentTransaction fragmentTransaction = getChildFragmentManager()
                        .beginTransaction();
                Fragment profileFragment = new DetailFragment();
                profileFragment.setArguments(bundle);
                fragmentTransaction
                        .add(R.id.sub_fragment_container, profileFragment);
                fragmentTransaction.addToBackStack(null);
                fragmentTransaction.commit();

使用android:animateLayoutChanges="true" 或者,为了进一步微调它,这里有一个我个人在我的应用程序中使用的经过测试的方法 Newslet 来解决完全相同的问题。

  1. 将您的 Toolbar 和 TabLayout 包装在 AppBarLayout 中。如果您了解设计支持库,这应该很容易。如果没有,this 应该可以帮助您入门。
  2. 在您的 onCreate() 中添加这段代码:

    LayoutTransition layoutTransition = new LayoutTransition();
    layoutTransition.setDuration(200);
    layoutTransition.setStartDelay(LayoutTransition.CHANGE_APPEARING, 0);
    layoutTransition.setStartDelay(LayoutTransition.APPEARING, 0);
    layoutTransition.setStartDelay(LayoutTransition.DISAPPEARING, 0);
    layoutTransition.setStartDelay(LayoutTransition.CHANGE_DISAPPEARING, 0);
    
    appBarLayout.setLayoutTransition(layoutTransition);
    

在此之后,当您删除选项卡或将其重新添加时,布局更改将顺利进行动画处理。

希望对您有所帮助!