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

时间:2018-09-23 14:08:35

标签: android android-fragments android-activity android-toolbar

在我的android应用程序中,我有一个活动和很多片段。但是,我只想显示某些片段的工具栏,而对于其他片段,我希望该片段为全屏显示。最好的推荐方法是什么(根据可见片段显示和隐藏活动工具栏)?

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

如果您使用的是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) {

    });

答案 2 :(得分:0)

我更喜欢使用接口。

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

使您的活动实现ActionbarHost,并将showToolbar替换为。

@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);
    }
}