我需要: 使用「登錄」選項創建選項菜單,當用戶登錄時需要更改爲「註銷」,當用戶再次點擊菜單按鈕時使用ActionBarSherlock時,選項菜單不會動態更新
當使用純SDK使用兼容性庫V4 然而,當使用ActionBarSherlock當菜單中onPrepareOptionsMenu不會更新我可以改變onPrepareOptionsMenu 同一作品的菜單選項;它仍然被調用,但顯示的菜單不會改變。
有沒有人有解決這個問題?
我需要: 使用「登錄」選項創建選項菜單,當用戶登錄時需要更改爲「註銷」,當用戶再次點擊菜單按鈕時使用ActionBarSherlock時,選項菜單不會動態更新
當使用純SDK使用兼容性庫V4 然而,當使用ActionBarSherlock當菜單中onPrepareOptionsMenu不會更新我可以改變onPrepareOptionsMenu 同一作品的菜單選項;它仍然被調用,但顯示的菜單不會改變。
有沒有人有解決這個問題?
是的,這是一個討厭的ABS錯誤。 你能解決這個問題是這樣的: 在FragmentActivity.java找到onPrepareOptionsMenu(android.view.Menu菜單)方法和註釋掉或刪除
if (mOptionsMenuInvalidated) {
線及其相應的右括號,所以這一塊得到執行,每次。 如果您正在使用FragmentMapActivity活動,請執行相同操作。
此線程有點舊,我無法應用建議的修復(或找到更好的修復)。我正在使用ActionBarSherlock 4.2,但在ICS設備上登錄選項菜單是疊加層時,仍然遇到問題:我無法弄清楚如何在登錄活動關閉後強制使菜單失效(並且應用程序已經確定登錄狀態已更改)。
我解決了帶有標誌的問題,使菜單onResume
失效。我覺得使用國旗是一種黑客行爲,但它比每一份履歷上的無效都好。
@Override
protected void onResume()
{
if (checkLoginState == Boolean.TRUE)
{
invalidateOptionsMenu();
checkLoginState = Boolean.FALSE;
}
super.onResume();
}
然後在onOptionsItemSelected
我設置的標誌:
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
// Handle item selection
switch (item.getItemId())
{
case R.id.actionbar_settings_signin_out:
if (isUserLoggedIn() == Boolean.TRUE)
{
logout();
validateOptionsMenu();
}
else
{
// set the flag so that on resume we update the options menu
checkLoginState = Boolean.TRUE;
startSignInActivity();
}
return true;
這是爲我工作,但我很好奇聽到的話,其他人有更好的方法解決它。
這很有用,謝謝! – jasonhudgins
也許你應該用類似這樣的方式給開發者發郵件...... –
這似乎在ABS中是固定的4.記得在你的onTabSelected()中調用invalidateOptionsMenu()來告訴系統啓動onPrepareOptionsMenu() – larham1
因爲這個是一個比較老的問題,我會用@ larham1建議去,並假定它是固定的。 – Denis