【问题标题】:Hide a Navigation Drawer Menu Item - Android隐藏导航抽屉菜单项 - Android
【发布时间】:2015-11-04 11:01:12
【问题描述】:

我有一个导航抽屉。调用事件时,我想为用户隐藏我的导航菜单项之一。我该怎么做?

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.sliding_menu);

    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    mTitle = mDrawerTitle = getTitle();

    // load slide menu items
    navMenuTitles = getResources().getStringArray(R.array.nav_drawer_items);

    // nav drawer icons from resources
    navMenuIcons = getResources()
            .obtainTypedArray(R.array.nav_drawer_icons);

    mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout1);
    mDrawerList = (ListView) findViewById(R.id.list_slidermenu1);

    navDrawerItems = new ArrayList<NavDrawerItem>();

    // adding nav drawer items to array
    // Home
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[0], navMenuIcons.getResourceId(0, -1)));
    // Profil
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[1], navMenuIcons.getResourceId(1, -1)));
    // Prospek
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[2], navMenuIcons.getResourceId(2, -1)));
    // Announcement
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[3], navMenuIcons.getResourceId(3, -1), true,
            cariTotal("http://192.168.0.23/api/android/announcement/").toString()));
    // Logout
    navDrawerItems.add(new NavDrawerItem(navMenuTitles[4], navMenuIcons.getResourceId(4, -1)));

    // Recycle the typed array
    navMenuIcons.recycle();
    //set event
    mDrawerList.setOnItemClickListener(new SlideMenuClickListener());
    // setting the nav drawer list adapter
    adapter = new NavDrawerListAdapter(getApplicationContext(),
            navDrawerItems);
    mDrawerList.setAdapter(adapter);
    // enabling action bar app icon and behaving it as toggle button
    getSupportActionBar().setDisplayHomeAsUpEnabled(true);
    getSupportActionBar().setHomeButtonEnabled(true);

    mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
            R.string.app_name,
            R.string.app_name
    ){
        public void onDrawerClosed(View view) {
            getSupportActionBar().setTitle(mTitle);
            // calling onPrepareOptionsMenu() to show action bar icons
            invalidateOptionsMenu();
        }

        public void onDrawerOpened(View drawerView) {
            getSupportActionBar().setTitle(mDrawerTitle);
            //mDrawerList.bringToFront();
            //mDrawerLayout.requestLayout();
            // calling onPrepareOptionsMenu() to hide action bar icons
            invalidateOptionsMenu();
        }
    };
    mDrawerLayout.setDrawerListener(mDrawerToggle);

    if (savedInstanceState == null) {
        // on first time display view for first nav item
        displayView(0);
    }
}
private void displayView(int position) {
    // update the main content by replacing fragments
    android.app.Fragment fragment = null;
    switch (position) {
        case 0:
            fragment = new HomeFragment();
            break;
        case 1:
            fragment = new ProfilFragment();
            break;
        case 2:
            fragment = new ProspekFragment();
            break;
        case 3:
            fragment = new AnnouncementFragment();
            break;
        case 4:
            Logout();
            break;
        default:
            break;
    }

    if (fragment != null) {
        android.app.FragmentManager fragmentManager = getFragmentManager();
        fragmentManager.beginTransaction()
                .replace(R.id.container, fragment).commit();

        // update selected item and title, then close the drawer
        mDrawerList.setItemChecked(position, true);
        mDrawerList.setSelection(position);
        setTitle(navMenuTitles[position]);
        mDrawerLayout.closeDrawer(mDrawerList);
    } else {
        // error in creating fragment
        Log.e("SlidingMenu", "Error in creating fragment");
    }
}

我想在索引 2 处隐藏我的抽屉式导航菜单项。该怎么做?

更新 我的导航抽屉中有 5 个菜单项,我想在调用某个事件时隐藏其中一个。

【问题讨论】:

  • 你的意思是删除DrawerLayout列表视图中的第二项?
  • 不,只是隐藏它。因为我想稍后再显示它

标签: android hide navigation-drawer


【解决方案1】:
NavigationView navigationView;
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);
    hideItem();
  }


private void hideItem()
   {
     navigationView = (NavigationView) findViewById(R.id.nav_view);
     Menu nav_Menu = navigationView.getMenu();
     nav_Menu.findItem(R.id.nav_settings).setVisible(false);
   }

【讨论】:

  • 代码有效。但是如何让它“消失”而不是“不可见”
  • @Kakumanusivakrishna:看看 Desmond Yao 的回答。它实际上是从列表中删除它而不是让它“消失”。但这是唯一的途径
  • @Kakumanusivakrishna .setVisible(false) 将仅保留项目
【解决方案2】:

这将作为 setInvisibility(GONE):

 Menu nav_Menu = navigationView.getMenu();
 nav_Menu.findItem(R.id.nav_profile).setVisible(false);
 nav_Menu.findItem(R.id.menu_login).setVisible(true);
 nav_Menu.findItem(R.id.menu_logout).setVisible(false);
 nav_Menu.findItem(R.id.menu_regsitration).setVisible(true);

【讨论】:

  • 能否请您添加有关这段代码如何提供帮助的更多信息。
  • 当您需要在运行时隐藏特定的导航菜单项时,此代码可为您提供帮助。示例:
  • 当用户登录时。它在导航抽屉中显示配置文件菜单,否则不会。使用此代码,您可以在导航抽屉中隐藏和显示菜单项。
【解决方案3】:

Kotlin 版本

 val navigationView: NavigationView = findViewById(R.id.nav_view) as NavigationView
 val nav_Menu: Menu = navigationView.getMenu()
 nav_Menu.findItem(R.id.nav_stock).setVisible(false)

【讨论】:

    【解决方案4】:

    您可以通过以下代码删除listview的第二项:

    navDrawerItems.remove(2);
    ((BaseAdapter)adapter).notifyDataSetChanged();
    

    【讨论】:

    • 这是第三项
    【解决方案5】:
    NavigationView navigationView = (NavigationView) findViewById(R.id.nav_view);
        navigationView.setNavigationItemSelectedListener(this);
    
    Menu menu =navigationView.getMenu();
    
    MenuItem target = menu.findItem(R.id.nav_target);
    
    target.setVisible(false);
    

    【讨论】:

      【解决方案6】:

      隐藏/显示导航项

      在您的 NavDrawerListAdapter 中进行如下更改,

      public class MyListAdapter extends BaseAdapter {
      
          Context context;
          ArrayList<ItemListModel> listMenuItem;
          ArrayList<ItemListModel> listMenuItem1;
          int hideViewIndex = -1;
      
          public MyListAdapter(Context context, ArrayList<ItemListModel> listMenuItem) {
              this.context = context;
              this.listMenuItem = listMenuItem;
              listMenuItem1=new ArrayList<ItemListModel>(listMenuItem);
          }
      
          @Override
          public int getCount() {
              return listMenuItem.size();
          }
      
          @Override
          public Object getItem(int position) {
              return listMenuItem.get(position);
          }
      
          @Override
          public long getItemId(int position) {
              return position;
          }
      
          private class ViewHolder
          {
              private ImageView imgLogo;
              private TextView txtItemName;
          }
      
          public void hideView(int pos)
          {
              listMenuItem.remove(pos);
              notifyDataSetChanged();
          }
      
          public void showView(int pos)
          {
              listMenuItem.add(pos, listMenuItem1.get(pos));
              notifyDataSetChanged();
          }
      
          @SuppressLint("InflateParams")
          @Override
          public View getView(int position, View convertView, ViewGroup parent) {
      
              ViewHolder viewHolder = null;
              if(convertView == null)
              {
                  LayoutInflater myLayoutInflater = (LayoutInflater) context.getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
                  convertView = myLayoutInflater.inflate(R.layout.activity_item_list, null);
                  viewHolder = new ViewHolder();
                  viewHolder.imgLogo = (ImageView) convertView.findViewById(R.id.imgLogo);
                  viewHolder.txtItemName = (TextView) convertView.findViewById(R.id.txtItemName);
                  convertView.setTag(viewHolder);
              }
              else
              {
                  viewHolder = (ViewHolder) convertView.getTag();
              }
              ItemListModel itemListModel = listMenuItem.get(position);
              viewHolder.imgLogo.setImageDrawable(itemListModel.getImageLogo());
              viewHolder.txtItemName.setText(itemListModel.getStrItemName());
      
              return convertView;
          }
      

      在activity中调用这个方法如下,

      adapter.hideView(2);
      //adapter.showView(2);
      

      【讨论】:

        【解决方案7】:
            //hide logout menu item when the user is not loggrd in
            //Checking the condition whether the user is logged in or not
        
            if (!SharedPrefManager.getmInstance(this).isLoggedIn()){
                Menu nav_Menu = navigationView.getMenu();
            nav_Menu.findItem(R.id.nav_logout).setVisible(false);
            }
        
        
         //SharedPrefManager .java class where we define the isLoggedIn Method()
        
        import android.content.Context;
        import android.content.SharedPreferences;
        
        import com.motortrade.motortrade.t_Model.User;
        
        public class SharedPrefManager {
        
        private static final String SHARED_PREF_NAME = "my_shared_pref";
        
        private  static SharedPrefManager mInstance;
        private Context mCtx;
        
        private SharedPrefManager(Context mCtx){
            this.mCtx = mCtx;
        }
        
        public static synchronized SharedPrefManager getmInstance(Context mCtx){
            if (mInstance == null){
                mInstance = new SharedPrefManager(mCtx);
            }
            return mInstance;
        }
        
        public boolean isLoggedIn(){
            SharedPreferences preferences = mCtx.getSharedPreferences(SHARED_PREF_NAME, Context.MODE_PRIVATE);
        
           return preferences.getInt("user_id", -1) != -1;
        }
        

        【讨论】:

          【解决方案8】:

          NavigationView 导航视图;

              mapIntentActivity = getIntent();
              navItemString = mapIntentActivity.getStringExtra("success");
          
              if(navItemString != null) {
          
                  navigationView = (NavigationView) findViewById(R.id.nav_view);
                  Menu nav_Menu = navigationView.getMenu();
                  nav_Menu.findItem(R.id.nav_car).setVisible(false);
          
              }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2013-06-13
            • 1970-01-01
            • 1970-01-01
            • 2014-08-20
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多