2013-01-08 57 views
1

現在幾周來一直讓我悲傷。我一直在浪費我的時間4-5個小時,並在剩下的時間裏完成其他工作。但現在又回到了我的夢想中。因爲我現在唯一要做的就是這個。有人可以讓我知道如何更新操作欄菜單項?就好像我們想要更新適配器中的數據(在ListView或微調器中),它可以通過adapter.notifyDataSetChanged()來完成。更新Actionbarsherlock中的Actionbar菜單

但是actionbar需要做什麼?我的要求是...

我有我的操作欄上的所有活動。假設用戶在4th活動上點擊login(action item on actionbar),他將被重定向到login from的第四項活動。提交詳細信息後,我正在完成登錄活動並將用戶重定向到5th activityIn the 5th activity I am displaying username(as an action item) instead of login option有一些共享偏好和操作的幫助。

但是實際問題出現在這裏--->當我回到第4項活動時,將顯示login(操作項),而不是用戶名。因爲我沒有對操作欄進行刷新以更新以前活動中的更改。這對於在後臺存在的所有活動都是如此。我認爲唯一的做法是在onResume()方法中做一些事情,因爲當活動來自後臺時,這個回調方法將被調用。但該方法應該做什麼?希望我的問題是可以理解的。如果有人想要其他細節,請告訴我。如果有人幫我解決這個問題,我會非常感激。

注意:我不想在onResume()中刷新我的活動,因爲它是一種黑客攻擊,而且會導致活動中的數據丟失。

回答

4

試試這個:

在所有的片段活動寫在onResume()。

@Override 
protected void onResume() { 

    super.onResume(); 

    this.invalidateOptionsMenu(); 

} 

,然後在

onCreateOptionsMenu(Menu menu) 

檢查用戶是否已登錄。如果是這樣,使用已用在其他顯示登錄菜單項相同的技術,顯示的用戶名。

希望這可以解決您的大問題。

+0

可悲的是,沒有。因爲無效選項需要最小api級別11.我正在使用actionbarsherlock。 – Korhan

+10

而不是this.invalidateOptionMenu()inResume(),因爲您使用ABS可以使用this.supportInvalidateOptionsMenu(); – SKK

+0

你能比這個清楚一點嗎? – Korhan

2

試試這個:

@Override 
protected void onResume() { 
    super.onResume(); 
    supportInvalidateOptionsMenu(); 
}