2014-06-24 66 views
0

我有一個菜單項顯示在我的操作欄中,我希望顯示「登錄」或「註銷」取決於用戶是登錄還是顯示登出。但是,我無法改變文本,因爲爲了這樣做,我必須從我的onOptionsSelected()方法中調用invalidateOptionsMenu()。我目前有一個方法來更新應顯示的文本,這工作正常,但爲了顯示該文本,我必須重新創建選項菜單。登錄/註銷與操作欄/菜單項

下面是我的一些代碼:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    //Inflate the menu; this adds items to the action bar if it is present. 
    getMenuInflater().inflate(R.menu.main, menu); 
    this.menu = menu; 
    updateMenuTitles(); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.login: 
      if (!loggedIn) { 
       Authentication(); 
      } else { 
       loggedIn = false; 
       authentication = false; 
       updateMenuTitles(); 
       Toast.makeText(getApplicationContext(),"Log Out Successful",Toast.LENGTH_SHORT).show(); 
      } 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

private void updateMenuTitles() { 
    MenuItem bedMenuItem = menu.findItem(R.id.login); 
    if (loggedIn) { 
     bedMenuItem.setTitle("Log Out"); 
    }else { 
     bedMenuItem.setTitle("Login"); 
    } 
} 

回答

-1

我建議在你的菜單中有兩個不同的按鈕,並根據需要轉換自己的知名度。 事情是這樣的:

@Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     switch (item.getItemId()) { 
      case R.id.login: 
       loggedIn = true; 
       Authentication(); 
       updateMenuTitles(); 
      break; 

      case R.id.logout: 
       loggedIn = false; 
       authentication = false; 
       updateMenuTitles(); 
       Toast.makeText(getApplicationContext(),"Log Out Successful",Toast.LENGTH_SHORT).show(); 
      break; 
    } 
    return super.onOptionsItemSelected(item); 
} 

private void updateMenuTitles() { 
    MenuItem loginMenuItem = menu.findItem(R.id.login); 
    MenuItem logoutMenuItem = menu.findItem(R.id.logout); 

    if (loggedIn) { 
     loginMenuItem.setVisibility(View.VISIBLE); 
     logoutMenuItem.setVisibility(View.GONE); 
    }else { 
     logoutMenuItem.setVisibility(View.VISIBLE); 
     loginMenuItem.setVisibility(View.GONE); 
    } 
} 
+0

不能使用'setVisibility'上'MenuItem' – jhobbie

+0

是的,你可以查看文檔:(http://developer.android.com/reference/android/view/MenuItem .html#setVisible(boolean)) –

+0

這就是'setVisible',它沒有'GONE'選項,這是你需要的,它不適用於布爾值。它所做的就是阻止我點擊按鈕。 – jhobbie