2016-01-01 31 views
1

我希望我的菜单在单击菜单时显示其下面的子菜单。我已经尝试了几种方法,但我无法完成这项工作。当我点击菜单时,应用程序崩溃。在抽屉菜单上设置可见性

这里是我的Java

@SuppressWarnings("StatementWithEmptyBody") 
@Override 
public boolean onNavigationItemSelected(MenuItem item) { 
    // Handle navigation view item clicks here. 
    int id = item.getItemId(); 

    if (id == R.id.nav_gallery) { 
     MenuItem acc1 = (MenuItem) findViewById(R.id.manage_profile); 
    } 
    else if (id == R.id.manage_profile) { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else if (id == R.id.nav_gallery2) { 
    } 
    else if (id == R.id.search_school) { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else if (id == R.id.school_vielnearby) { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else if (id == R.id.school_vielall) { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else if (id == R.id.nav_gallery3) { 
    } 
    else if (id == R.id.search_organization) { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else if (id == R.id.organization_vielnearby) { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    else if (id == R.id.organization_vielall) { 
     DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout); 
     drawer.closeDrawer(GravityCompat.START); 
    } 
    return true; 
} 

这是我的菜单XML

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android"> 
<group 
    android:id="@+id/menuall"> 
    <item 
     android:id="@+id/nav_gallery" 
     android:icon="@android:drawable/ic_menu_gallery" 
     android:title="My Account"> 
    </item> 
    <item 
     android:id="@+id/manage_profile" 
     android:checked="false" 
     android:visible="false" 
     android:title="  Manage Account"> 
    </item> 
    <item 
     android:id="@+id/nav_gallery2" 
     android:icon="@android:drawable/ic_menu_gallery" 
     android:title="School"> 
    </item> 
    <item 
     android:id="@+id/search_school" 
     android:checked="false" 
     android:visible="false" 
     android:title="  Search School"/> 
    <item 
     android:id="@+id/school_vielnearby" 
     android:checked="false" 
     android:visible="false" 
     android:title="  View Nearby"/> 
    <item 
     android:id="@+id/school_vielall" 
     android:checked="false" 
     android:visible="false" 
     android:title="  View All"/> 
    <item 
     android:id="@+id/nav_gallery3" 
     android:icon="@android:drawable/ic_menu_gallery" 
     android:title="Organization"> 
    </item> 
    <item 
     android:id="@+id/search_organization" 
     android:checked="false" 
     android:visible="false" 
     android:title="  Search Organization"/> 
    <item 
     android:id="@+id/organization_vielnearby" 
     android:checked="false" 
     android:visible="false" 
     android:title="  View Nearby"/> 
    <item 
     android:id="@+id/organization_vielall" 
     android:checked="false" 
     android:visible="false" 
     android:title="  View All"/> 
</group> 
</menu> 

所以基本上我想我的应用程序被点击菜单时能见度设置为true。

这里的logcat的,当我点击包含此代码

if (id == R.id.nav_gallery) { 
     MenuItem acc1 = (MenuItem) findViewById(R.id.manage_profile); 
     acc1.setVisible(true); 

    } 

    01-01 20:20:52.696 21622-21622/ph.schoolar.schoolar W/dalvikvm﹕ threadid=1: thread exiting with uncaught exception (group=0x41bf7c08) 
01-01 20:20:52.706 21622-21622/ph.schoolar.schoolar E/AndroidRuntime﹕ FATAL EXCEPTION: main 
    Process: ph.schoolar.schoolar, PID: 21622 
    java.lang.NullPointerException 
      at ph.schoolar.schoolar.StudentView.onNavigationItemSelected(StudentView.java:114) 
      at android.support.design.widget.NavigationView$1.onMenuItemSelected(NavigationView.java:150) 
      at android.support.v7.view.menu.MenuBuilder.dispatchMenuItemSelected(MenuBuilder.java:811) 
      at android.support.v7.view.menu.MenuItemImpl.invoke(MenuItemImpl.java:152) 
      at android.support.v7.view.menu.MenuBuilder.performItemAction(MenuBuilder.java:958) 
      at android.support.design.internal.NavigationMenuPresenter$1.onClick(NavigationMenuPresenter.java:308) 
      at android.view.View.performClick(View.java:4654) 
      at android.view.View$PerformClick.run(View.java:19438) 
      at android.os.Handler.handleCallback(Handler.java:733) 
      at android.os.Handler.dispatchMessage(Handler.java:95) 
      at android.os.Looper.loop(Looper.java:146) 
      at android.app.ActivityThread.main(ActivityThread.java:5602) 
      at java.lang.reflect.Method.invokeNative(Native Method) 
      at java.lang.reflect.Method.invoke(Method.java:515) 
      at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:1283) 
      at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1099) 
      at dalvik.system.NativeStart.main(Native Method) 
+0

你能后的logcat的输出? – cafebabe1991

+0

先生,请帮忙 –

回答

5

没有必要找id.You有一个菜单已经item对象从onNavigationItemSelected(MenuItem item)

删除线

MenuItem acc1 = (MenuItem) findViewById(R.id.manage_profile); 

试用

item.setVisible(false); //true or false 

您的需求 如果你已经使用NavigationView

navigationView = (NavigationView) findViewById(R.id.navigation_view); 

    Menu menu = navigationView.getMenu(); 
    for (int menuItemIndex = 0; menuItemIndex < menu.size(); menuItemIndex++) { 
     MenuItem menuItem= menu.getItem(menuItemIndex); 
     if(menuItem.getItemId() == R.id.search_school){ 
      menuItem.setVisible(false); 
     } 
    } 
+0

menuItem无法解析,它有一个红色的指示灯 –

+0

确定它的工作原理,但我的问题仍然存在。我输入你的代码,当我点击菜单,如果我把它设置为false,我点击的菜单消失,我想要发生的是当我点击某个菜单时,其他菜单将显示 –

+0

你使用过'navigationView'吗? –