2012-08-10 126 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和一切都很好