2012-05-15 97 views
3

我經歷的教程,而事實證明,這個示例代碼使菜單:什麼是在Android中創建菜單的正確方法?

public void onCreateOptionsMenu(Menu m) { 
     super.onCreateOptionsMenu(m); 
     MenuInflater menuInflater = getMenuInflater(); 
     menuInflater.inflate(R.menu.time_list_menu, m); 
    } 

我得到一個錯誤,所以我把它改爲布爾值,它現在是什麼,所以我做到了這個代替,其工作:

public boolean onCreateOptionsMenu(Menu m) { 
     super.onCreateOptionsMenu(m); 
     MenuInflater menuInflater = getMenuInflater(); 
     menuInflater.inflate(R.menu.time_list_menu, m); 
     return true; 
    } 

但我也有這樣的東西從這裏另外一個問題上堆棧溢出

Understanding why onCreateOptionsMenu is not displaying a menu

Android的文檔也有這樣的:

@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.game_menu, menu); 
    return true; 
    } 

調用超級哪兒去了?爲什麼它沒有必要?如果我做錯了,製作菜單的正確方法是什麼?

雖然我在這個問題上,文件也顯示@Override,但我沒有它,它的工作。如果這些方法被明確地覆蓋,我只是困惑於是否有必要。我很感激幫助。如果需要澄清,請告訴我。

+0

參考這一個http://developer.android.com/guide/topics/ui/menus.html – KMI

+0

@Override不是必須的,但我會推薦它。它可以幫助你和其他讀取你的代碼的人區分重寫的方法和本地的方法。 – gobernador

回答

3

爲了解決你的兩個具體問題:

  1. super.onCreateOptionsMenu:一般情況下這是一個好主意,調用基類的功能,這樣當你打算改進他們的行動。在這種情況下,它沒有什麼區別(據你所知),但文檔建議它,所以你應該執行它,以確保未來的Android版本兼容性。
  2. @Override:此註釋是自願的,但非常有用,它確保方法簽名與底層基類的匹配。這意味着如果你聲明這個方法有點不對(與它重寫的方法不同),編譯器將會得到這個差異(而不是僅僅考慮它是一種新方法而不是在上下文中調用它)

因此,如果不是嚴格需要,兩者都是有用和正確的。

+0

哈哈,謝謝你回答我的問題。非常感激! – Andy

1

你必須調用super,javadoc說影響菜單的排序過程。我認爲呼叫位置沒有特別的意義。

0

創建android Menu選項使用下面的代碼。

@Override 
public boolean onCreateOptionsMenu(Menu menu) 
{ 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    switch (item.getItemId()) 
    { 
    case R.id.yourItemID: 
     //do whatever you want here 
     break; 
    case R.id.yourItemID: 
     //do whatever you want here 
     break; 
    } 
    return true; 
} 

上面的代碼適合我。試試這個tutorial它會清楚地解釋你。

相關問題