2012-06-28 18 views
7

में कुंजी दर्ज करने सुनो यहाँ मेरी कोड है:एंड्रॉयड

public class CaptureENTER extends Activity implements OnKeyListener{ 

/* on create and other stuff in here*/ 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
       (keyCode == KeyEvent.KEYCODE_ENTER)) { 
      Toast.makeText(LiVoiceActivity.this, 
            "YOU CLICKED ENTER KEY", 
            Toast.LENGTH_LONG).show(); 

     }  
     return false; 
    } 

मैं नहीं पता है कि क्या हो रहा है, लेकिन जब मैं अपने कीबोर्ड में एंटर कुंजी दबाएँ (मैं एंड्रॉयड एमुलेटर उपयोग कर रहा हूँ), घटना सक्रिय नहीं है

मुझे क्या याद आ रही है?

उत्तर

10

इस प्रयास करें:

public class CaptureENTER extends Activity implements OnKeyListener{ 

/* on create and other stuff in here*/ 

    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if ((event.getAction() == KeyEvent.ACTION_DOWN) && 
       (keyCode == KeyEvent.KEYCODE_ENTER)) { 
      Toast.makeText(LiVoiceActivity.this, 
            "YOU CLICKED ENTER KEY", 
            Toast.LENGTH_LONG).show(); 
      return true; 

     }   
     return false; 
    } 

संपादित करें: David सही है !!

सत्य लौटने का मुद्दा मुद्दा नहीं है।

आप असफल हो रहे हैं क्योंकि आपको श्रोता को एक दृश्य में सेट करना होगा, केवल गतिविधि ही नहीं।

16

रिटर्निंग true समस्या नहीं है।

आप असफल हो रहे हैं क्योंकि आपको श्रोता को View पर सेट करना होगा, न केवल Activity

स्पष्टीकरण के लिए संपादित:

श्रोता की वापसी मान एक संकेत है कि घटना या नहीं कहा जा होगा रूप में समझा जा करने के लिए नहीं है। और यह वैसे भी नहीं हो सकता है, क्योंकि return खंड को के बाद ही Toast दिखाया गया है।

यह सिस्टम के लिए एक सिग्नल है कि आगे की कार्रवाई की आवश्यकता है (वापसी false) या यह विधि पूरी तरह से और सही तरीके से संभाली गई है (वापसी true)। यदि श्रोता भस्म घटना, झूठी अन्यथा है

रिटर्न

यह सच है: यही कारण है कि documentation इन शब्दों में कहते हैं है।


में अंतर होता है: लागू करने

  • View.OnKeyListenerinterface अपने Activity कक्षा में।

अपने Activity अपनी कक्षा में इंटरफ़ेस द्वारा प्रदान की कार्यक्षमता, जैसे कि, को लागू करने के लिए अनुमति देता है कि दुनिया है कि आपके Activity जानता है कि कैसे घटना उस तरह संभाल करने के लिए घोषणा करते हैं।

कृपया इस तथ्य पर ध्यान दें कि मैंने कहा " घोषित करें"।सिर्फ इसलिए कि आपने घोषित किया है कि आप जानते हैं कि किसी कार्य को कैसे संभालना है, इसका मतलब यह नहीं है कि लोग आपको यह कार्य देंगे, और न ही इसका मतलब यह है कि आप अपने आप को ऐसे कार्यों को उत्पन्न कर सकते हैं। यह मेरी राय में implements कीवर्ड के लिए एक अच्छा रूपक है। यहां Activity "एक कार्य के लिए पूछता है"।

रूपकों एक तरफ, तकनीकी रूप से, Activity है कि घटना को संभालने के लिए एक तरह से परिभाषित करने जाता है, लेकिन यह अपने आप में घटना उस तरह का नहीं बना सकते।

  • अपने Activity कार्यान्वयन

को View कॉलबैक की स्थापना है कि का उपयोग करना, एक View एक श्रोता को बांधता है (जो होने वाला अपने Activity), यह सूचित करने के लिए जब भी घटना होता है का वादा।

इनपुट प्राप्त करने के लिए यह आपके Activity के साथ "अनुबंध" करता है (View पर उपयोगकर्ता एंटर कुंजी दबाता है) और Activity को सूचित करता है। और चूंकि Activity ने पहले यह घोषणा की थी कि यह प्रदर्शन करने में सक्षम है, BOTH पार्टियां अनुबंध को निष्पादित कर सकती हैं क्योंकि पहले (पिछली वस्तु देखें) पर सहमति हुई थी।

रूपकों एक तरफ फिर से, तकनीकी रूप से, यहाँ ActivityView द्वारा पंजीकृत है घटना में सूचना प्राप्त करना बाद में जब View ट्रिगर। Activityकैसे घोषित करता है, लेकिन जानता है जब

निष्कर्ष:

यह सिर्फ interface रों (कम से कम इस मामले में) के लिए एक रूपक है। यह जटिल लग सकता है, लेकिन जब आप इसे दो-पक्षीय समझौते के रूप में सोचते हैं तो यह क्रिस्टल स्पष्ट होता है। यदि आपको बेहतर, तकनीकी, स्पष्टीकरण की आवश्यकता है, तो मैं interface एस पढ़ने के बारे में सुझाव देता हूं।


नई टिप्पणी प्रश्न के उत्तर:

हैलो दाऊद और बाकी सब। वास्तव में मैं पूरी गतिविधि में श्रोता सेट नहीं कर सकता?

इस तरह से नहीं। आपको dispatchKeyEvent ओवरराइड करने की आवश्यकता है। एक उदाहरण:

@Override 
public boolean dispatchKeyEvent(KeyEvent e) { 
if (e.getKeyCode() == KeyEvent.KEYCODE_ENTER) { 
    Toast.makeText(UITestsActivity.this, 
       "YOU CLICKED ENTER KEY", 
       Toast.LENGTH_LONG).show(); 
     return true; 
    } 
    return super.dispatchKeyEvent(e); 
}; 
+0

आह, और निश्चित रूप से यह एक केंद्रित होना चाहिए ... अन्यथा हम गैर-स्पर्श मोड में दृश्यों के बीच अंतर कैसे करेंगे ... मुझे यकीन है कि आप उस पर ध्यान दे रहे हैं , सही? सही? ;-) – davidcesarino

+0

सटीक उत्तर –

+0

हैलो डेविड और अन्य सभी के लिए +1। वास्तव में मैं पूरी गतिविधि में श्रोता सेट नहीं कर सकता? –

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

  • कोई संबंधित समस्या नहीं^_^