我一直在开发一些应用程序一切都很顺利,每次我离开主要片段工具栏,tablayout
也会去,只要我回到主片段工具栏和{{1在那里等我的地方。
最近,我在较新的Android 7.0上测试了我的应用,结果是工具栏和tablayout
没有去任何地方,它们只是停留在任何片段的顶部。
我尝试过这种方法:
tablayout
使用此方法从顶部删除tablayout和工具栏,但是当我使用后退按钮返回时,它也会从主片段中删除这两个。
我已尝试在我的主片段上使用onResume,但据我所知,除非父View view2 = getActivity().findViewById(R.id.tabs);
View view = getActivity().findViewById(R.id.toolbar);
view2.setVisibility(View.GONE);
view.setVisibility(View.GONE);
重新加载,否则onResume中不会显示任何结果。
我的问题是,如何在特定的嵌套片段上隐藏工具栏和mainactivity
而不将其隐藏在我的主片段上。我已经查看了其他问题,每个人都在谈论在滚动过程中隐藏它们的必要性。
非常感谢任何帮助。
P.S。这就是我在mainactivity上设置工具栏和tablayout的方法:
tablayout
编辑:这些图片将更好地说明我面临的问题
当我转到嵌套片段(第二个片段)时,我删除了工具栏,但当我按回去返回主片段时,它也被移除了。
我想要的是将它隐藏在我的嵌套片段上并将其留在主片段上。
答案 0 :(得分: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);
你试图隐藏片段中活动的设计部分,如果你希望这样做,下一步做的就是使用ONACTIVITYCREATED()电源但是还必须有办法访问片段中的容器活动视图可以在此方法中完成。
但是,如果您希望活动的标题设计在打开片段时仍然有用,那么上面的代码将会有所帮助!快乐的编码
如果您想要隐藏任何内容,可以使用OnBackPressed功能!为你做这件事!例如,如果你想看到当主片段进入操作并且TOOLBAR等应该返回时你应该覆盖OnBackPressendMethod并在那里你可以检查当前从堆栈中加载的片段以及它是否是"必需的一个& #34;然后只需使用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