2013-03-03 7 views
30

मैं एक बटन के साथ एक साधारण मेनू बनाने की कोशिश कर रहा हूं जो सरणी को साफ़ करने के लिए एक विधि को कॉल करेगा। मैं एक्सएमएल का उपयोग नहीं करना चाहता क्योंकि मुझे बस एक बटन चाहिए।एंड्रॉइड प्रोग्रामेटिक रूप से एक साधारण मेनू बनाएं

कुछ इस तरह -

public boolean onCreateOptionsMenu(Menu menu) { 
    button "Clear Array"; 
    onClick{// run method that wipes array}; 
    return true; 
} 

धन्यवाद

उत्तर

54

ए-सी की विधि काम करती है, लेकिन आपको क्लिक श्रोताओं को मैन्युअल रूप से सेट करने से बचना चाहिए। विशेष रूप से जब आपके पास एकाधिक मेनू आइटम होते हैं।

मैं इस तरह से पसंद करते हैं:

private static final int MENU_ITEM_ITEM1 = 1; 
... 
@Override 
public boolean onCreateOptionsMenu(Menu menu) { 
    menu.add(Menu.NONE, MENU_ITEM_ITEM1, Menu.NONE, "Item name"); 
    return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
    case MENU_ITEM_ITEM1: 
     clearArray(); 
     return true; 

    default: 
     return false; 
    } 
} 

इस दृष्टिकोण आप अनावश्यक वस्तुओं (श्रोताओं) बनाने से बचें का उपयोग करके और मैं भी इस कोड को पढ़ने और समझने के लिए लगता है।

+1

मुझे यह भी पसंद है। निश्चित रूप से भविष्य में – Shmuel

+1

+1 में इसका उपयोग करने वाला है, लेकिन: एंड्रॉइड 4 पर? संकलक त्रुटि, क्योंकि वापसी बयान के बाद तोड़। मैं इसे संपादित करने की कोशिश करूंगा, –

+0

धन्यवाद, धन्यवाद, इसे याद किया। – Paul

23

इस तरह कुछ काम कर सकते हैं:

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuItem item = menu.add ("Clear Array"); 
    item.setOnMenuItemClickListener (new OnMenuItemClickListener(){ 
    @Override 
    public boolean onMenuItemClick (MenuItem item){ 
     clearArray(); 
     return true; 
    } 
    }); 
    return true; 
} 

Menu हमें एक आसान विधि, add(), आप एक MenuItem जोड़ने की अनुमति देता है जो देता है । तो हम एक बनाते हैं। फिर हम MenuItem पर OnMenuItemClickListener असाइन करते हैं और हम इसे करने के लिए अपने onMenuItemClick() को ओवरराइड करते हैं।

+0

पूरी तरह से काम किया;) धन्यवाद – Shmuel

+0

@ डेविड कोई समस्या नहीं। चूंकि आपको केवल एक बटन की आवश्यकता है (जैसे आपने अपने प्रश्न में निर्दिष्ट किया है), यह ठीक है, और कम कोड लेता है। लेकिन जैसे पौलुस ने कहा, यदि आपके पास एकाधिक बटन हैं, तो यह अनुशंसा की जाती है कि आप उस दृष्टिकोण का पालन करें। –

12

प्रोग्रामेटिक रूप से, मैं निम्नलिखित कोड का उपयोग करके एक साधारण मेनू बनाने में सक्षम था।

private final int MenuItem_EditId = 1, MenuItem_DeleteId = 0; 

@Override 
    public boolean onCreateOptionsMenu(Menu menu){ 

    MenuItem edit_item = menu.add(0, MenuItem_EditId, 0, R.string.edit); 
    edit_item.setIcon(R.drawable.edit); 
    edit_item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

    MenuItem delete_item = menu.add(0, MenuItem_DeleteId, 1, R.string.edit); 
    delete_item.setIcon(R.drawable.delete); 
    delete_item.setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_IF_ROOM); 

    return super.onCreateOptionsMenu(menu); 
} 
संबंधित मुद्दे