2012-09-05 15 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> 

अद्यतन है: (समाधान) बस (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

मेरे पास पहले से ही ऑप्शन इटैम है, प्रत्येक आइटम के लिए चयन किया गया है, लेकिन मैं क्या करना चाहता हूं जब मैं उपमेनू – pedja

+0

खोलने के लिए हार्डवेयर मेनू कुंजी पर क्लिक करता हूं, यह सभी मेनू आइटमों के लिए 'ऑनऑप्शन इटैम चयन (मेनूइटम आइटम)' करता है। इस विधि के अंदर, आप यह जांच सकते हैं कि मेनू मेनू पर कौन सा मेनू आइटम चुना गया है (अगर इसका उपयोग करें .. या स्विच..केस ..) –