2012-03-19 11 views
5

मैं अपने ऐप के लिए एक विकल्प मेनू को लागू करने की कोशिश कर रहा हूं और एक ही मेनू विभिन्न गतिविधियों में उपयोग किया जाता है। Android developers site में, यह कहना है निम्नलिखित:कई गतिविधियों के लिए विकल्प मेनू को एक बार कार्यान्वित करना

युक्ति: यदि आपके आवेदन कई गतिविधियों में शामिल है और उनमें से कुछ एक ही विकल्प मेनू प्रदान हैं, तो एक गतिविधि है कि onCreateOptionsMenu() और छोड़कर कुछ भी नहीं लागू करता है बनाने पर विचार करें onOptionsItemSelected() विधियों। फिर प्रत्येक गतिविधि के लिए इस कक्षा का विस्तार करें जो समान विकल्प मेनू साझा करना चाहिए। इस तरह, आप मेनू क्रियाओं को संभालने के लिए कोड का एक सेट प्रबंधित कर सकते हैं और प्रत्येक वंशज कक्षा मेनू व्यवहार प्राप्त करती है। यदि आप में मेनू आइटम को वंश की गतिविधियों में से एक जोड़ना चाहते हैं, तो उस गतिविधि को में क्रिएटऑप्शनमेनू() पर ओवरराइड करें। Super.onCreateOptionsMenu (मेनू) पर कॉल करें, इसलिए मूल मेनू आइटम बनाए गए हैं, फिर menu.add() के साथ नए मेनू आइटम जोड़ें। आप अलग-अलग मेनू आइटमों के लिए सुपर क्लास के व्यवहार को ओवरराइड भी कर सकते हैं।

मेरी गतिविधियां गतिविधि, सूची गतिविधि या मानचित्र गतिविधि से बढ़ती हैं, तो वे यहां क्या सुझाव दे रहे हैं, इसे लागू करने का सही तरीका क्या होगा? क्या यह संभव है? क्योंकि मैं इन सभी के लिए इस नई कक्षा का विस्तार नहीं कर सकता, मैं केवल कुछ ऐसा कर सकता हूं जैसे सार्वजनिक सार बेसमेनू गतिविधि को बढ़ाता है (जैसा कि this question में बताया गया है) लेकिन यह मेरे लिए काम नहीं करता है। तो मैं सोच रहा हूं कि क्या कोई काम है जो मैं कार्यान्वित कर सकता हूं।

अग्रिम

+0

+1 आपके अच्छे प्रश्न के लिए। –

उत्तर

2

कि आम बेस मेनू वर्ग के लिए धन्यवाद आप MapActivity वर्ग का विस्तार करने की जरूरत है। तो आप सभी गतिविधियों के लिए उस सामान्य आधार मेनू वर्ग का विस्तार कर सकते हैं।

उस सूची के लिए आप निष्क्रियता सूची के बिना सूची को भी कार्यान्वित कर सकते हैं, आप इसे केवल गतिविधि या मानचित्र क्रियाशीलता द्वारा कार्यान्वित कर सकते हैं।

आपको नीचे की तरह आईडी के साथ xml फ़ाइल में सूचीदृश्य घोषित करना होगा।

<ListView 
      android:id="@+id/listView" 
      android:layout_width="fill_parent" 
      android:layout_height="fill_parent"/> 

फिर आपको इसे अपनी गतिविधि कक्षा में घोषित करना होगा।

ListView listView = (ListView)findViewById(R.id.listView); 
listView.setAdapter(your adapter); 

ऊपर की तरह आप सूची एक्टिविटी के विस्तार के बिना इसे कार्यान्वित कर सकते हैं।

+0

क्या गतिविधि के बजाए MapActivity का उपयोग करने का यह एक अच्छा तरीका है यदि कुछ गतिविधि में मानचित्र की आवश्यकता नहीं है। मुझे लगता है कि यह अधिक स्मृति का उपभोग करता है। –

+1

जैसा कि मुझे पता है कि नक्शा गतिविधि के बिना मानचित्र लागू नहीं किया गया है, इसलिए सामान्य आधार मेनू विकल्प के लिए यह उपयुक्त तरीका है। –

1

आप mapactivity वर्ग के विस्तार के बिना MapView उपयोग नहीं कर सकते .... यह उल्लेख .. MapView without MapActivity ..so आप अपने आधार वर्ग नक्शा गतिविधि का विस्तार ... और सूचीदृश्य का उपयोग कर गतिविधि के लिए .. एक्सएमएल में सूचीदृश्य डाल दिया और आप देना चाहिए .. अपनी गतिविधि में उपयोग कर सकते हैं

0

मैं बहुत की तरह, एक स्थिर MenuProvider वर्ग है कि आपके onCreateOptionsMenu() और onOptionItemsSelected() पद्धतियों स्थिर onCreateOptionsMenu() और गतिविधियों की onOptionsItemsSelected() से कहा जाने को लागू करता है पैदा करेगा:

public static class MenuProvider { 

    // You can pass it the activity and other variables used by this method if 
    // you need to. 
    // Since the implementation is the same across all activities, they should 
    // pass the same variables. 
    public static void onCreateOptionsMenu(MenuItem item, Activity callingActivity, ...) 
     ... // Do stuff on create 
    } 

    public static void onOptionItemsSelected(MenuItem item, Activity callingActivity, ...) 
     ... // Do stuff on item select 
    } 
} 

और आपकी प्रत्येक सक्रियता में es, आप करेंगे:

public class MyMapActivity extends MapActivity { 
    ... 

    public void onCreateOptionsMenu(MenuItem item) 
     MenuProvider.onCreateOptionsMenu(item, this, ... /*other variables */); 
    } 

    public static void onOptionItemsSelected(MenuItem item) 
     MenuProvider.onOptionItemsSelected(item, this, ... /*other variables */); 
    } 

    ... 
} 
+0

धन्यवाद, मुझे नहीं पता कि मैंने इससे पहले क्यों नहीं सोचा था :) शायद यह अन्य कार्यान्वयन के रूप में सुरुचिपूर्ण नहीं है, लेकिन मुझे लगता है कि यह आसान और कम गन्दा है क्योंकि मैंने एंड्रॉइड में प्रोग्राम नहीं किया है उतना सारा। – marimaf

+0

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

संबंधित मुद्दे