代码之家  ›  专栏  ›  技术社区  ›  Mr.BitCoin

在片段中隐藏工具栏和表格布局

  •  0
  • Mr.BitCoin  · 技术社区  · 6 年前

    我一直在开发一些应用程序,一切都很顺利,每次我把主片段留在工具栏上 tablayout 我一回到主片段工具栏 表格布局 在那里等我。

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

    我尝试过这种方法:

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

    使用此方法,它会从顶部删除tablayout和toolbar,但是当我使用back按钮返回时,它也会从主片段中删除这两个。 我尝试在我的主要片段上使用onResume,但据我所知,除非父母 mainactivity 重新加载,onResume中不会显示结果。

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

    任何帮助都将不胜感激。

    P、 这是我在主活动上设置工具栏和表格布局的方式:

    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

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

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

    1 回复  |  直到 6 年前
        1
  •  1
  •   Rizwan Atta    6 年前

    嗯,我从你的陈述中猜测,你似乎在试图加载。在活动中出现碎片,并且不希望看到工具栏和选项卡栏!你使用的方法是正确的!使用visibility Goe是实现这一目标的方法,我认为也是这样,但问题是代码的位置!下面是你应该怎么做!

    在您的容器活动中,您尝试在执行以下操作后加载片段

    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函数!为你做这件事!例如,如果您想看到当主片段开始运行并且工具栏等应该返回时,您应该重写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