繁体   English   中英

如何在打开相应的片段时隐藏导航抽屉项目

[英]How to hide navigation drawer item while the respective fragment is opened

在我的应用程序中,我使用了导航抽屉。 在这里,我列出了所有项目。

从图片来看,物品是,

  • 过滤和排序
  • 愿望清单
  • 店铺
  • 我的订单
  • 设置
  • 登出

如果我在Shop的 Fragment 中,我需要隐藏它。 这个怎么做?

请帮我。

在此处输入图像描述

您可以在片段onAttach方法中处理它。 根据您的需要设置特定项目的可见性。

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    YourActivity activity = (YourActivity)context;
    NavigationView navigationView = (NavigationView) activity.findViewById(R.id.yournavigationviewid);
    navigationView.getMenu().findItem(R.id.youritemid).setVisible(false);
}

在您获取所选菜单项的 setNavigationItemSelectedListener 中,您可以实现代码。 您还需要存储隐藏菜单项的实例以使其稍后可见

MenuItem prevMenuItem;

navigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {

   @Override
   public boolean onNavigationItemSelected(MenuItem menuItem) {
      if(prevMenuItem != null) prevMenuItem.setVisible(true) //making visible the previously hidden item.
      menuItem.setVisible(false);  

      prevMenuItem = menuItem //storing the instance of currently hidden item to make it visible later.

      return true;
   }
});

在您的公共 onNavigationItemSelected(MenuItem item) 中,如果您正在设置一个片段,那么抽屉将自动隐藏。 我正在这样做:

 public boolean onNavigationItemSelected(MenuItem item) {
    // Handle navigation view item clicks here.
    toolbar.setTitle(item.toString());
    int id = item.getItemId();
    if (id == R.id.dashboard) {
        fragment = new DashboardFragment();

    } else if (id == R.id.manage_users) {

    }else{
    }
    setFragmentLayout(fragment);
    return true;
}

根据您的要求设置您的片段。

您可以在onNavigationItemSelected Listener 中使用mDrawerLayout.closeDrawers()隐藏抽屉,如下所示:

    mNavigationView.setNavigationItemSelectedListener(new NavigationView.OnNavigationItemSelectedListener() {
            @Override
            public boolean onNavigationItemSelected(MenuItem menuItem) {
                menuItem.setChecked(true);
                switch (menuItem.getItemId()) {
                    case R.id.navigation_item_shop:
                        //do your stuffs or attach fragment
                        mDrawerLayout.closeDrawers();
                        return true;
                    default:
                        return true;
               }
         }
   }

在片段上覆盖onAttach方法。 为不需要的项目设置可见性。

@Override
public void onAttach(Context context) {
    super.onAttach(context);
    MainActivity activity = (MainActivity)context;
    NavigationView navigationView = (NavigationView) activity.findViewById(R.id.navmenu);
   // hide the menu items not related to this fragment
    Menu m = navigationView.getMenu();
    m.findItem(R.id.first).setVisible(false);
    m.findItem(R.id.second).setVisible(false);
    m.findItem(R.id.therd).setVisible(false);
    //and so on

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM