2012-08-10 98 views
0

这里膨化的Android OptionsMenu是我的代码:基于登录状态

@Override 
     public boolean onCreateOptionsMenu(Menu menu) { 
     MenuInflater inflater = getMenuInflater(); 
     inflater.inflate(R.menu.menu, menu); 
     SearchManager searchManager = (SearchManager) getSystemService(Context.SEARCH_SERVICE); 
     SearchView searchView = (SearchView) menu.findItem(R.id.menu_search) 
       .getActionView(); 
     searchView.setSearchableInfo(searchManager 
       .getSearchableInfo(getComponentName())); 
     searchView.setIconifiedByDefault(true); 
     searchView.setSubmitButtonEnabled(true); 
     return true; 
    } 

    @Override 
    public boolean onMenuOpened(int featureId, Menu menu) { 
     MenuItem Login = menu.findItem(R.id.Login); 
     MenuItem Logout = menu.findItem(R.id.Logout); 
     MenuItem About = menu.findItem(R.id.About); 
     MenuItem Profile = menu.findItem(R.id.Profile); 

     // set the menu options depending on login status 
     if (LoggedStatus == true) { 
      // show the log out option 
      Logout.setVisible(true); 
      Login.setVisible(false); 

      Profile.setVisible(true); 
      About.setVisible(true); 
     } else { 
      // show the log in option 
      Logout.setVisible(false); 
      Login.setVisible(true); 

      Profile.setVisible(false); // hide 
      About.setVisible(true); 
     } 

     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 

     case R.id.Login: 
      Intent i = new Intent(this, Login.class); 
      startActivity(i); 

      return true; 
     case R.id.Logout: 

      return true; 
     case R.id.Profile: 

      return true; 
     case R.id.About: 

      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
     } 
    } 

我正在上四个菜单项的的Null pointer exception。 我只是想为登录一个菜单,一个用于注销。

编辑:这是利用操作栏,菜单溢出和Android 4.0+ 此外,更多的代码的应用程序。 这里是menu.xml文件:

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

    <item 
     android:id="@+id/menu_search" 
     android:actionViewClass="android.widget.SearchView" 
     android:icon="@android:drawable/ic_menu_search" 
     android:showAsAction="always" 
     android:title="search"/> 
    <item 
     android:id="@+id/Login" 
     android:title="Login"/> 
    <item 
     android:id="@+id/Logout" 
     android:title="Logout"/> 
    <item 
     android:id="@+id/Profile" 
     android:title="My Profile"/> 
    <item 
     android:id="@+id/About" 
     android:title="About"/> 

</menu> 
+0

你在哪里得到'NPE'? – 2012-08-10 16:18:08

+0

对于四个MenuItem中的每一个 - 我如何订购它并不重要。 – KickingLettuce 2012-08-10 16:21:09

+1

通常我可以设置''onPrepareOptionsMenu'的MenuItem'知名度。试着搬到那里 – 2012-08-10 16:27:04

回答

2

可以在onPrepareOptionsMenu设置MenuItem知名度。试着搬到那里。

关于奖金。在DOC他们告诉onPrepareOptionsMenu被称为每次按下菜单。我测试了一个按钮更改boolean param onClick显示/隐藏MenuItem和一切都很好