रिटर्निंग true
समस्या नहीं है।
आप असफल हो रहे हैं क्योंकि आपको श्रोता को View
पर सेट करना होगा, न केवल Activity
।
स्पष्टीकरण के लिए संपादित:
श्रोता की वापसी मान एक संकेत है कि घटना या नहीं कहा जा होगा रूप में समझा जा करने के लिए नहीं है। और यह वैसे भी नहीं हो सकता है, क्योंकि return
खंड को के बाद ही Toast
दिखाया गया है।
यह सिस्टम के लिए एक सिग्नल है कि आगे की कार्रवाई की आवश्यकता है (वापसी false
) या यह विधि पूरी तरह से और सही तरीके से संभाली गई है (वापसी true
)। यदि श्रोता भस्म घटना, झूठी अन्यथा है
रिटर्न
यह सच है: यही कारण है कि documentation इन शब्दों में कहते हैं है।
में अंतर होता है: लागू करने
View.OnKeyListener
interface
अपने Activity
कक्षा में।
अपने Activity
अपनी कक्षा में इंटरफ़ेस द्वारा प्रदान की कार्यक्षमता, जैसे कि, को लागू करने के लिए अनुमति देता है कि दुनिया है कि आपके Activity
जानता है कि कैसे घटना उस तरह संभाल करने के लिए घोषणा करते हैं।
कृपया इस तथ्य पर ध्यान दें कि मैंने कहा " घोषित करें"।सिर्फ इसलिए कि आपने घोषित किया है कि आप जानते हैं कि किसी कार्य को कैसे संभालना है, इसका मतलब यह नहीं है कि लोग आपको यह कार्य देंगे, और न ही इसका मतलब यह है कि आप अपने आप को ऐसे कार्यों को उत्पन्न कर सकते हैं। यह मेरी राय में implements
कीवर्ड के लिए एक अच्छा रूपक है। यहां Activity
"एक कार्य के लिए पूछता है"।
रूपकों एक तरफ, तकनीकी रूप से, Activity
है कि घटना को संभालने के लिए एक तरह से परिभाषित करने जाता है, लेकिन यह अपने आप में घटना उस तरह का नहीं बना सकते।
- अपने
Activity
कार्यान्वयन
को View
कॉलबैक की स्थापना है कि का उपयोग करना, एक View
एक श्रोता को बांधता है (जो होने वाला अपने Activity
), यह सूचित करने के लिए जब भी घटना होता है का वादा।
इनपुट प्राप्त करने के लिए यह आपके Activity
के साथ "अनुबंध" करता है (View
पर उपयोगकर्ता एंटर कुंजी दबाता है) और Activity
को सूचित करता है। और चूंकि Activity
ने पहले यह घोषणा की थी कि यह प्रदर्शन करने में सक्षम है, BOTH पार्टियां अनुबंध को निष्पादित कर सकती हैं क्योंकि पहले (पिछली वस्तु देखें) पर सहमति हुई थी।
रूपकों एक तरफ फिर से, तकनीकी रूप से, यहाँ Activity
View
द्वारा पंजीकृत है घटना में सूचना प्राप्त करना बाद में जब 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);
};
आह, और निश्चित रूप से यह एक केंद्रित होना चाहिए ... अन्यथा हम गैर-स्पर्श मोड में दृश्यों के बीच अंतर कैसे करेंगे ... मुझे यकीन है कि आप उस पर ध्यान दे रहे हैं , सही? सही? ;-) – davidcesarino
सटीक उत्तर –
हैलो डेविड और अन्य सभी के लिए +1। वास्तव में मैं पूरी गतिविधि में श्रोता सेट नहीं कर सकता? –