【问题标题】:Hide toolbar and tablayout in fragments在片段中隐藏工具栏和选项卡布局
【发布时间】:2018-05-03 20:30:24
【问题描述】:

我一直在开发一些应用程序,一切都很好,每次我离开主片段时,工具栏和 tablayout 也会消失,只要我回到主片段工具栏和 tablayout 等我的地方那里。

最近,我在较新的 android 7.0 上测试了我的应用程序,结果是工具栏和 tablayout 不会去任何地方,它们只会停留在任何片段的顶部。

我试过这种方法:

View view2 = getActivity().findViewById(R.id.tabs);
View view = getActivity().findViewById(R.id.toolbar);
view2.setVisibility(View.GONE);
view.setVisibility(View.GONE);

使用此方法,它会从顶部删除 tablayout 和工具栏,但是当我使用后退按钮返回时,它也会从主片段中删除这两个。 我已经尝试在我的主要片段上使用 onResume,但据我所知,除非父 mainactivity 重新加载,否则 onResume 中不会显示任何结果。

我的问题是,如何在特定嵌套片段上隐藏工具栏和 tablayout 而不将其隐藏在我的主片段上。我浏览了其他问题,每个人都在谈论在滚动过程中隐藏它们的必要性。

任何帮助将不胜感激。

附:这就是我在 mainactivity 上设置工具栏和 tablayout 的方式:

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar); // Setting/replace toolbar as the ActionBar
TabLayout tabLayout = (TabLayout)findViewById(R.id.tabs);
tabLayout.addTab(tabLayout.newTab().setText(getResources().getText(R.string.tab0)));
tabLayout.addTab(tabLayout.newTab().setText(getResources().getText(R.string.tab1)));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

编辑:这些图片将更好地说明我面临的问题

Main fragment

second fragment

Main fragment again

当我转到嵌套片段(第二个片段)时,我删除了工具栏,但是当我按下返回返回主片段时,它也被删除了。

我想要的是将它隐藏在我的嵌套片段上,并将它留在主片段上。

【问题讨论】:

  • 您的要求是什么?是不是向下滚动时隐藏工具栏,向上滚动时显示?
  • @HarikumarAlangode,请检查编辑,它说明了我所追求的

标签: android android-fragments


【解决方案1】:

好吧,我从您的陈述中猜测似乎您正在尝试加载。活动中的片段,不想看到工具栏和标签栏!好吧,您使用的方法是正确的!使用可见性 GONE 是这样做的方法,我认为相同,但问题是代码的位置!这是你应该怎么做的!

在您尝试加载片段的容器活动中

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar); // Setting/replace toolbar as the ActionBar
TabLayout tabLayout = (TabLayout)findViewById(R.id.tabs);
tabLayout.addTab(tabLayout.newTab().setText(getResources().getText(R.string.tab0)));
tabLayout.addTab(tabLayout.newTab().setText(getResources().getText(R.string.tab1)));
tabLayout.setTabGravity(TabLayout.GRAVITY_FILL);

这是你必须做的!只是你的fragmentTransaction在提交之后将片段提交到容器中,你可以这样做

FragmentManager mFragManager = getSupportFragmentManager();
FragmentTransaction mFragTranscation = mFragManager.startTransaction();
mFragTranscation.add(R.id.containerId,yourFragObject());
mFragTransaction.commit();
//after that you can do the visibility GONE MAGIC
toolbar.setVisibility(View.GONE);
tabLayout.setVisibility(View.GONE);

如果您希望在片段中隐藏 Activity 的设计部​​分,下一个方法是使用 ONACTIVITYCREATED() 功能,但它还必须有一种访问容器 Activity 视图的方法在这个方法中可以完成的片段中。

但如果您希望活动的标题设计在片段打开时继续进行,上述编写的代码将有所帮助!快乐编码

如果您想要返回隐藏的任何内容,您可以使用 OnBackPressed 功能!为你做!例如,如果您想看到当主要片段开始起作用并且工具栏等应该返回时,您应该覆盖 OnBackPressendMethod 并且在那里您可以检查当前从堆栈加载回哪个片段,如果它是“必需的”,那么只需将 VISIBLITY(VIEW.VISIBLE) 用于您想要回到屏幕上的那些!

在 MainFragment 中覆盖

@Override
public void onBackPressed() {
   //here you can call the things back if the frag required is loaded
}

//尝试这种方式添加片段并将其名称添加到堆栈中

private void replaceFragment (Fragment fragment){
  String backStateName = fragment.getClass().getName();

  FragmentManager manager = getSupportFragmentManager();
  boolean fragmentPopped = manager.popBackStackImmediate (backStateName, 0);

  if (!fragmentPopped){ //fragment not in back stack, create it.
    FragmentTransaction ft = manager.beginTransaction();
    ft.replace(R.id.content_frame, fragment);
    ft.addToBackStack(backStateName);
    ft.commit();
  }
}

这样你可以做更多检查这个线程在这里STACK_THREAD

【讨论】:

  • 是的,我试图仅在嵌套片段中隐藏工具栏和选项卡,我使用选项卡作为导航,每个选项卡都有它的按钮,只要按下按钮,就会打开新片段,但是我不想在那里看到 tabslayout 或工具栏,用这种方法它会删除它们,但是当我回到主要片段时,它也会在那里删除它。请参阅编辑。
  • 好的,我可以看到这里发生了什么!我正在编辑您需要的进一步解决方案的答案,如果有帮助请接受答案^_^
  • 但是你如何从哪个片段中检测到你正在这样做呢?我一直在尝试你的方法,但我需要以某种方式知道我按下后将加载的片段是主要片段,对吗?
  • 是的,当你添加一个片段时,你应该在 add to backStack 选项中添加它的标签 lemme add an example
猜你喜欢
  • 2017-08-22
  • 2015-11-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-04-28
  • 2015-03-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多