2012-09-05 216 views
18

標題解釋了所有內容。我想打開操作欄中的子菜單時點擊硬件菜單按鈕打開硬件菜單按鈕上的操作欄中的子菜單單擊

這是代碼,它工作正常,我第一次點擊菜單。每個其他時間,它只是閃爍(打開,立即關閉它)

private Menu mainMenu; 
public boolean onCreateOptionsMenu(Menu menu) { 

MenuInflater inflater = getMenuInflater(); 
inflater.inflate(R.menu.options, menu); 
mainMenu = menu; 

return true; 
} 

public boolean onKeyDown(int keyCode, KeyEvent event) { 
if(event.getAction() == KeyEvent.ACTION_DOWN){ 
    switch(keyCode) { 
    case KeyEvent.KEYCODE_MENU: 

     mainMenu.performIdentifierAction(R.id.more, 0); 

     return true; 
    } 
} 
return super.onKeyDown(keyCode, event); 
} 

,這裏是options.xml

<?xml version="1.0" encoding="utf-8"?> 
<menu xmlns:android="http://schemas.android.com/apk/res/android" > 

<item 
    android:id="@+id/settings" 
    android:icon="@drawable/ic_menu_preferences" 
    android:showAsAction="ifRoom|withText" 
    android:title="Settings"/> 

<item 
    android:id="@+id/about" 
    android:icon="@drawable/ic_menu_info_details" 
    android:showAsAction="ifRoom|withText" 
    android:title="About"/> 

<item 
    android:id="@+id/more" 
    android:icon="@drawable/ic_menu_moreoverflow_normal_holo_dark" 
    android:showAsAction="always|withText" 
    android:title="More"> 
    <menu> 
     <item 
    android:id="@+id/changelog" 
    android:icon="@drawable/ic_menu_recent_history" 
    android:showAsAction="ifRoom|withText" 
    android:title="Changelog"/> 
     <item 
    android:id="@+id/update" 
    android:icon="@drawable/ic_menu_refresh" 
    android:showAsAction="ifRoom|withText" 
    android:title="Update Check"/> 
<item 
    android:id="@+id/check" 
    android:icon="@drawable/ic_menu_help" 
    android:showAsAction="ifRoom|withText" 
    android:title="Compatibility Check"/> 
     </menu> 
     </item> 

</menu> 

UPDATE(解決方案) 剛換的onkeydown()方法的onkeyup (),現在它堅持

+0

感謝您的編輯幫助:) – Prateek

+0

非常感謝您的問題!我一直在尋找解決方案! –

+0

感謝您的解決方案更新 – antongorodezkiy

回答

6

試試這個:

public boolean onCreateOptionsMenu(Menu menu) 
{ 
    super.onCreateOptionsMenu(menu);// <--- add this 

    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.options, menu); 
    mainMenu = menu; 
    return true; 
} 

//override this method instead of onKeyDown().... 
@Override 
public boolean onOptionsItemSelected(MenuItem item) 
{ 
    super.onOptionsItemSelected(item);  

    int menuId = item.getItemId();  
    if(menuId == R.id.settings) 
    { 
     //do settings 
    } 
    //else if(menuId = ...) {....} 

    return true; 
} 
+0

當我點擊菜單時,如何調用它? – pedja

+0

我已經有onOptionsItemSelected爲每個項目,但我想要做的是當我點擊硬件菜單鍵來打開子菜單 – pedja

+0

這是什麼'onOptionsItemSelected(MenuItem項目)'做所有的菜單項。在這個方法裏面,你可以檢查基於'menuId'選擇哪個菜單項(使用if..else ..或者switch..case ..) –