2015-08-12 2 views
21

У меня есть ящик для навигации. Когда вызывается событие, я хочу скрыть один из моих пунктов меню навигации для пользователя. Как я могу это сделать?Скрыть элемент меню ящика навигации - Android

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. Как это сделать?

UPDATE У меня есть 5 пунктов меню в моем навигационном ящике, я хочу скрыть один из них, когда вызывается какое-то событие.

+0

Вы хотите удалить второй элемент в виде списка DrawerLayout? –

+0

нет, просто спрячьте его. потому что я хочу снова показать его позже – huzain07

ответ

82
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); 
    } 
+2

Code works.But, как заставить его «уйти» вместо «невидимого» –

+0

@Kakumanusivakrishna: Посмотрите на ответ Десмонда Яо. Это на самом деле удалить его из списка, а не заставить его «уйти». Но это единственный путь, чтобы принять – poring91

+0

Спасибо его помощь мне –

3

Вы можете удалить второй элемент ListView с помощью следующего кода:

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

просто скрыть это sir, cz я хочу показать его позже – huzain07

+1

Это третий пункт –

0

Скрыть/Показать навигации пункт

сделать изменения в вашей 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; 
    } 

и назовите этот метод в действии следующим образом:

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

Это будет работать, как 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); 
+4

Не могли бы вы добавить дополнительную информацию о том, как этот фрагмент кода помогает. – Wtower

+0

, когда вам нужно скрыть определенный пункт меню навигации во время выполнения, этот код вам поможет. пример: –

+0

, когда пользователь является логином. его меню отображения профиля в навигационном ящике в противном случае нет. используя этот код, вы можете скрыть и показать пункт меню в навигационном ящике. –

0

NavigationView 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); 

    } 
Смежные вопросы