2011-04-21 52 views
2

我已修改CommonsWare的prefenceActivity應用程序,但遇到問題。使用菜單按鈕啓動PreferenceActivity並使用後退按鈕結束

我想用菜單按鈕啓動prefenceActivity,然後用後退按鈕結束它。

我有了這個通過菜單按鈕啓動我的prefenceActivity:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    startActivity(new Intent(this, EditPreferences.class)); 
    return(true); 
} 

而且它回到我的應用程序的主視圖中,但還沒有完成,我認爲,因爲當我再次按菜單按鈕,prefenceActivity不會彈出。我必須關閉我的應用程序,並且只能再次運行一次。

我已經嘗試完成它在我的prefenceActivity當我按下後退按鈕,但這也沒有幫助。

這是什麼,我做錯了?

感謝您的幫助!

+5

「我想用菜單按鈕啓動一個prefenceActivity,並用後退按鈕完成它」 - 爲什麼?你爲什麼要這樣打破用戶界面?爲什麼你想混淆用戶,誰習慣菜單按鈕提出一個菜單?用戶和媒體成員憎恨那些缺乏紀律的開發者,他們沒有正當的理由違反UI模式。他們在文章,博客帖子/評論等方面大聲抱怨。結果,Android應用程序成爲衆多投訴的目標,如果您堅持這一點,您將成爲其中的另一個。 – CommonsWare 2011-04-21 20:10:59

回答

3

一個快速的解決方案(雖然我不建議這)是使用

public boolean onPrepareOptionsMenu (Menu menu) 

這就是所謂的每次菜單按鈕被按下時,顯示的菜單右側前。 onCreateOptionsMenu的問題是它只在第一次創建菜單之前調用。所以這並不是說活動沒有完成,而是用來啓動活動的方法的問題

+1

打敗我吧。正確,onCreateOptionsMenu()只在第一次使用選項菜單時調用。 – Squonk 2011-04-21 18:15:07

+0

感謝您快速明確的答案。這正是我正在尋找的。 – patrick 2011-04-21 18:19:46

+5

請不要這樣做。請參閱下面的答案。 – hackbod 2011-04-21 18:25:26

14

如果您只是想按下菜單按鈕時執行某些操作,則應該只執行onKeyDown ()/ onKeyUp()像處理其他任何鍵一樣處理菜單鍵。請務必返回true以表示您正在使用它,以便不執行默認的按鍵處理(通常涉及顯示菜單面板)。

不要通過實現onCreateOptionsMenu()或onPrepareOptionsMenu()來做到這一點。這些是您實現與選項菜單進行交互的鉤子,而不是菜單鍵。不能保證這些將被按下的菜單鍵與任何關係調用。事情經常是這樣,但API中並沒有定義這種說法,而且這確實是而不是這種情況。

作爲一般規則,依賴於這樣的副作用(哦,當用戶按下菜單鍵時,這個API沒有被記錄爲直接綁定到菜單鍵被調用)是絕對應該避免的。你的定義依賴於實現細節,這很可能會咬你。

例如在Android 3.0中有一個操作欄時onCreateOptionsMenu()在創建活動時立即調用,並且在需要更新操作欄中的操作時調用onPrepareOptionsMenu()。這是因爲選項菜單現在與操作欄集成在一起。

+1

+1:Dianne知道她的東西。 – Devunwired 2011-04-21 18:32:52

+0

+1:沒有想到在互動中的差異。好的解決方案 – Spidy 2011-05-09 21:48:24