根据可见片段处理 activity 工具栏可见性

Handling activity toolbar visibility according to visible fragment

在我的 android 应用程序中,我有一个 activity 和许多片段。但是,我只想显示某些片段的工具栏,对于其他片段,我希望该片段是全屏的。执行此操作的最佳和推荐方法是什么(根据可见片段显示和隐藏 activity 工具栏)?

由于您想要不同的表示形式,因此您的每个片段都应该(当您需要时)拥有它们自己的 toolbar

因此您的 Activity 的布局将有一个简单的 fragment_container。

如果您使用的是 viewPager,那么您可以仅使用 MainActivity 中的单个工具栏来完成此操作

 pager.addOnPageChangeListener(new ViewPager.OnPageChangeListener() {
        @Override
        public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {

        }

        @Override
        public void onPageSelected(int position) {

              if(position==YourFragmentPosition)
                        {
                     toolbar.setVisibility(View.VISIBLE);
                           }
                  else{
                      toolbar.setVisibility(View.GONE);
                     }
            }
        }

        @Override
        public void onPageScrollStateChanged(int state) {

    });

我更喜欢为此使用界面。

public interface ActionbarHost {
    void showToolbar(boolean showToolbar);
}

使您的 activity 实现 ActionbarHost 并覆盖 showToolbar as。

@Override
public void showToolbar(boolean showToolbar) {
    if (getSupportActionBar() != null) {
        if (showToolbar) {
            getSupportActionBar().show();
        } else {
            getSupportActionBar().hide();
        }
    }
}

现在从你的片段初始化 onAttach()

private ActionbarHost actionbarHost;
@Override
public void onAttach(Context context) {
    super.onAttach(context);
    if (context instanceof ActionbarHost) {
        actionbarHost = (ActionbarHost) context;
    }
}

如果你想从片段中隐藏操作栏调用 actionbarHost.showToolbar(false);

if (actionbarHost != null) {
            actionbarHost.showToolbar(false);
        }

此外,我建议在 onDetach()

中再次展示它
@Override
public void onDetach() {
    super.onDetach();
    if (actionbarHost != null) {
        actionbarHost.showToolbar(true);
    }
}