2010-11-12 15 views
15

मैं मेनू बटन के क्लिक से startActivity (myIntent) को कॉल करने का प्रयास कर रहा हूं लेकिन मेरा एप्लिकेशन उस बिंदु पर दुर्घटनाग्रस्त हो जाता है।Android में मेनू आइटम से गतिविधि को कैसे कॉल करें?

वही प्रारंभ एक्टिविटी कॉल नियमित बटन क्लिक से ठीक काम करता है, इसलिए, मुझे लगता है कि मेन्यू बटन में संदर्भ के बारे में जानकारी गुम है? या शायद मैं यहाँ निशान से पूरी तरह से बंद हूँ।

तो ... मेनू आइटम रखने का सही तरीका मुझे एक विशिष्ट गतिविधि में ले जाने का क्या सही तरीका है?

मैंने सलाह के शुरुआती सेट के आधार पर अपना कोड संशोधित कर दिया है। अभी भी एक ही जगह में दुर्घटनाग्रस्त हो रहा है। डीबगर अपवाद खंड में प्रवेश नहीं करता है, ऐप बस मर जाता है।

[कोड स्निपेट के साथ संपादित]

public boolean onCreateOptionsMenu(Menu menu) { 
    MenuInflater inflater = getMenuInflater(); 
    inflater.inflate(R.menu.menu, menu); 
    return true; 
} 
@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    // Handle item selection 
    try{ 
    switch (item.getItemId()) { 
    case R.id.menuItemLang:    
     startActivity(new Intent("com.my.project.SETTINGS")); 
     return true;   
    default: 
     return super.onOptionsItemSelected(item); 
    } 
    }catch(Exception e){ 
     log(e); 
    } 
} 
+1

कृपया पूर्ण stacktr पोस्ट करें आपके क्रैश से ऐस, और कोड स्निपेट कि आप गतिविधि कैसे शुरू कर रहे हैं। –

+0

आपको अपना कोड और अपना स्टैक ट्रेस – Falmarri

+0

पोस्ट करना होगा, आपको स्टैक ट्रेस देखने के लिए लॉगकैट का उपयोग करना चाहिए। यदि आप ग्रहण का उपयोग कर रहे हैं, तो आप डीडीडीएस परिप्रेक्ष्य में स्विच कर सकते हैं, या लॉगकट दृश्य खोल सकते हैं। अन्यथा कमांड लाइन से adb logcat चलाएं। –

उत्तर

43

पहले विकल्प

आप अपने गतिविधि है, जो जब उपयोगकर्ता विकल्प मेनू में आइटम पर क्लिक करता है कहा जाता है में onOptionsItemSelected विधि ओवरराइड करने के लिए किया है। विधि में आप जांच सकते हैं कि किस आइटम पर क्लिक किया गया है।

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
    case R.id.menu_item1: 
     Intent intent = new Intent(this, ActivityForItemOne.class); 
     this.startActivity(intent); 
     break; 
    case R.id.menu_item2: 
     // another startActivity, this is for item with id "menu_item2" 
     break; 
    default: 
     return super.onOptionsItemSelected(item); 
    } 

    return true; 
} 

वहाँ भी है onContextItemSelected तरीका है जिसके similary काम करता है, लेकिन संदर्भ मेनू के लिए (मुझे यकीन है कि नहीं हूँ, क्या मेनू तुम्हारा मतलब)।

पर

अधिक जानकारी http://developer.android.com/guide/topics/ui/menus.html

संपादित करें:

दूसरा विकल्प

मुझे लगता है कि पहला विकल्प आसान है, लेकिन अपने कोड से मैं देख रहा हूँ, कि आप के रूप में गतिविधि शुरू करना चाहते हैं एक क्रिया (पैरामीटर Intent कन्स्ट्रक्टर में)। ऐसा करने के लिए, आपको अपने AndroidManifest.xml में एक क्रिया निर्दिष्ट करने की आवश्यकता है। तो, अगर मैं गतिविधि ActivityForItemOne (पिछले उदाहरण से) शुरू होगा AndroidManifest.xml में <application> तत्व इस प्रकार दिखाई देगा:

<application ...> 
    ... 

    <activity android:label="Activity For First Item" android:name=".ActivityForItemOne"> 
     <intent-filter> 
      <action android:name="my.app.ITEMONE" /> 
      <category android:name="android.intent.category.DEFAULT" /> 
     </intent-filter> 
    </activity> 
</application> 

और Intent हो जाएगा:

Intent intent = new Intent("my.app.ITEMONE"); 

my.app. का पैकेज है आपका आवेदन। अपने एप्लिकेशन पैकेज का उपयोग करना आवश्यक नहीं है, लेकिन कार्यों की विशिष्टता के लिए इसकी अनुशंसा की जाती है।

में और जानकारी यहां:

Class Intent - Action and Category constants

Action element

Intents and Intent Filters

आशा यह आपकी समस्या का समाधान।

+0

संपादित करें: दूसरा विकल्प, क्रिया नाम से गतिविधि शुरू करना। – branoholy

1

अधिक optimice:

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch (item.getItemId()) { 
     case R.id.item1: 
      return true; 
     case R.id.item2: 
      return true; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 
} 
0

अगर वहाँ है 2 कक्षा 1 MainActivity 2 में आपका स्वागत है तो आप स्वागत> MainActivity

@Override सार्वजनिक बूलियन onCreateOptionsMenu (मेनू मेनू) से जाने की जरूरत है {

return true; 
} 

@Override 
public boolean onOptionsItemSelected(MenuItem item) { 
    switch(item.getItemId()) { 
     case R.id.logout: 
      Intent intent = new Intent(this, MainActivity.class); 
      this.startActivity(intent); 
      break; 
     case R.id.settings: 
      // another startActivity, this is for item with id "menu_item2" 
      break; 
     default: 
      return super.onOptionsItemSelected(item); 
    } 

    return true; 
} 
संबंधित मुद्दे